特別變量:bash
$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示全部向腳本傳遞的參數
$$ 腳本運行的當前進程ID號
$! 後臺運行的最後一個進程的ID號
$@ 與$#相同,可是使用時加引號,並在引號中返回每一個參數。
$- 顯示Shell使用的當前選項,與set命令功能相同。
$? 顯示最後命令的退出狀態。0表示沒有錯誤,其餘任何值代表有錯誤。測試
腳本調試:spa
1 -n 檢測語法錯誤,不執行腳本
script:debug_quotes.shdebug
#!/bin/bash echo "USER=$USER echo "HOME=$HOME" echo "OSNAME=$OSNAME"
[root@limt01 ~]# bash -n debug_quotes.sh debug_quotes.sh:行4: 尋找匹配的 `"' 是遇到了未預期的文件結束符 debug_quotes.sh:行5: 語法錯誤: 未預期的文件結尾
2 -v 在執行過程是顯示每條命令
script:listusers.sh調試
#!/bin/bash cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt awk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt #Clean up the temporary file. /bin/rm -f /tmp/users.txt
[root@limt01 ~]# bash -v listusers.sh #!/bin/bash cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt awk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt limt limt root root #Clean up the temporary file. /bin/rm -f /tmp/users.txt
3 -x 跟蹤每一步執行記錄code
[root@limt01 ~]# bash -x listusers.sh + cut -d : -f1,5,7 /etc/passwd + grep -v sbin + grep sh + sort + awk -F: ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt limt limt root root + /bin/rm -f /tmp/users.txt
數值測試:blog
-eq 等於則爲真
-ne 不等於則爲真
-gt 大於則爲真
-ge 大於等於則爲真
-lt 小於則爲真
-le 小於等於則爲真進程
字符串測試:ip
= 等於則爲真
!= 不相等則爲真
-z 字符串 字符串長度僞則爲真
-n 字符串 字符串長度不僞則爲真字符串
文件測試:
-e 文件名 若是文件存在則爲真
-r 文件名 若是文件存在且可讀則爲真
-w 文件名 若是文件存在且可寫則爲真
-x 文件名 若是文件存在且可執行則爲真
-s 文件名 若是文件存在且至少有一個字符則爲真
-d 文件名 若是文件存在且爲目錄則爲真
-f 文件名 若是文件存在且爲普通文件則爲真
-c 文件名 若是文件存在且爲字符型特殊文件則爲真
-b 文件名 若是文件存在且爲塊特殊文件則爲真
Shell還提供了與( -a )、或( -o )、非( ! )三個邏輯操做符用於將測試條件鏈接起來,其優先級爲:"!"最高,"-a"次之,"-o"最低。
數值計算:
var=`expr $var + 1`let "var=(2+2-1)/2" var=$((var+1))var=$[var+1]