
系統變量
$n 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2 $? 上個命令的退出狀態,或函數的返回值。成功返回0,失敗返回1 $# 傳遞給腳本或函數的參數個數 $* 所有這些參數都被雙引號引住。若一個腳本接收兩個參數,$*等於$1$2 $0 正在被執行命令的名字。對於shell腳本而言,這是被激活命令的路徑 $@ 被雙引號(” “)包含時,與 $* 稍有不同。若一個腳本接收到兩個參數,$@等價於$1$2 $$ 當前shell的進程號。對於shell腳本,這是其正在執行時的進程ID $! 前一個后台命令的進程號
文件或目錄判斷
-b file 若文件存在且是一個塊特殊文件,則為真 -c file 若文件存在且是一個字符特殊文件,則為真 -d file 若文件存在且是一個目錄,則為真 -e file 若文件存在,則為真 -f file 若文件存在且是一個規則文件,則為真 -g file 若文件存在且設置了SGID位的值,則為真 -h file 若文件是軟鏈接,則為真 -k file 若文件存在且設置了”sticky”位的值 -L file 若文件為符號鏈接,則為真 -p file 若文件存在且為一已命名管道,則為真 -r file 若文件可讀,則為真 -s file 判斷文件是否存在,且是否為非空,不為空,則為真 -S file 判斷文件是否存在,且是否為套接字文件 -t file 文件描述符(默認為1)指定的設備為終端時為真 -u file 若文件存在且設置了SUID位,則為真 -w file 若文件可寫,則為真 -x file 若文件可執行,則為真 [ file1 -nt file2 ] 若file1比file2新,或file1存在但file2不存在,則為真 [ file1 -ot file2 ] 若file1比file2老,或file2存在但file1不存在,則為真 [ file1 -ef file2 ] 若file1和file2指向相同的設備和節點號則返回,為真
整數判斷
-eq 兩數相等,則為真 例:if [ "$a" -eq "$b" ]
-ne 兩數不相等,則為真 例:if [ "$a" -ne "$b" ]
-gt a大於b,則為真 例:if [ "$a" -gt "$b" ]
-ge 大於或等於,則為真 例:if [ "$a" -ge "$b" ]
-lt a小於b,則為真 例:if [ "$a" -lt "$b" ]
-le a小於或等於b,則為真 例:if [ "$a" -le "$b" ]
< 小於(需雙括號) 例:(("$a" < "$b"))
<= 小於等於(需雙括號) 例:(("$a" <= "$b"))
> 大於(需雙括號) 例:(("$a" > "$b"))
>= 大於等於(需雙括號) 例:(("$a" >= "$b"))
小數據比較可使用AWK。
邏輯運算判斷符
! [ ! false ] 返回true 邏輯否,條件為假,結果為真 -a [ $a -lt 2 -a $b -gt 5 ] 返回true 邏輯與,兩個表達式都為真,則為真 -o [ $a -lt 2 -o $b -gt 5 ] 返回true 邏輯或,只要有一個表達式為true,則為真 [ ] || [ ] 用OR來合並兩個條件 [ ] && [ ] 用AND來合並兩個條件
字符串判斷
== 若兩個字符串相同則為真,與=等價 例:[ "str1" = "str2" ] != 若字符串不相同則為真 例:[ "str1" != "str2" ] < 若str1字典排序在str2前則為真 例:[[ "str1" < "str2" ]] > 若str1字典排序在str2后則為真 例:[ "str1" \> "str2" ] -n 若str長度非零則為真,即非空 例:[ -n "str1" ] -z 若file長度為零,即空,則為真 例:[ -z "str1" ]
注意:在[]結構中”< “需要被轉義,例如:[ "str1" /< "str2" ],在雙中括號中則無需轉義。 總結:使用-n在[]結構中測試,必須要用""把變量引起來,使用一個未被""的字符串,請使用 ! -z ,如果使用未被雙引號變量,雖然可以工作,但這並不安全,習慣於使用雙引號括住變量測試字符串是一種良好的習慣。 另外,[[ ]] 結構比[ ]結構更加通用
