shell 條件測試語句
要使Shell指令碼程式具備一定的“智慧”,面臨的第一個問題就是如何區分不同的情況以確定執行何種操作。例如,當磁碟使用率超過95%傳送警告;當備份目錄不存在時能夠自動建立;當原始碼編譯程式的配置失敗則不再繼續安裝等。
Shell環境根據命令執行後的返回狀態值($?)來判斷是否執行成功,當返回值為0,表示成功,值為其他時,表示失敗。
使用專門的測試工具—test命令,可以對特定條件進行測試,並根據返回值來判斷條件是否成立(返回值0為成立)
使用test命令的兩種形式
A:test 條件表示式
B:[ 條件表示式 ]
檔案屬性測試
檔案測試是指根據給定的路徑名稱,判斷是檔案還是目錄,判斷是否具有讀寫執行許可權,常用的選項如下
-e file 測試file是否存在
-f file 測試file是否為普通檔案
-d file 測試file是否為目錄
-r file 測試檔案是否可讀
-w file 測試檔案是否可寫
-x file 測試檔案是否可執行
比如判斷/media/cdrom是否存在
[root@yaoguang ~]# [ -d /media/cdrom ]
[root@yaoguang ~]# echo $?
1
[root@yaoguang ~]# [ ! -d /media/cdrom ]
[root@yaoguang ~]# echo $?
0
或者用test去判斷
[root@yaoguang ~]# test -d /media/cdrom [root@yaoguang ~]# echo $? 1
邏輯測試
是判斷兩個或多個條件之間的依賴關係,當系統任務取決於多個不同的條件時,根據這些條件是否同時成立或只要有其中一個成立等情況,需要有一個測試的過程。常用選項如下:
&&:
邏輯與,表示“而且”,只有前後兩個條件都成立時,整個測試命令的返回值才為0。使用test命令時,“&&”可改為“-a”
||:
邏輯或,表示“或者”,只有前後兩個條件中一個成立,整個測試命令的返回值才為0。使用test命令時,“||”可改為“-o”
[ $var1 -ne 0 -a $var2 -gt 2 ] # 使用邏輯與 -a [ $var1 -ne 0 -o $var2 -gt 2 ] # 使用邏輯或 -o
!:
邏輯否,表示“不”,只有當指定的條件不成立時,整個測試命令的返回值才為0。
“&&”、“||”通常也用於間隔不同的命令操作,其作用是相似得
數值比較
主要根據給定的兩個值,判斷第一個與第二個數的關係,如是否大於、小於、等於第二個數。
整數值比較在Shell指令碼應用中比較多。例如:判斷已登入使用者數量、開啟程序數、磁碟使用率是否超標,以及軟體版本是否符合要求。實際使用時,往往會通過變數引用,命令替換等方式來獲取一個值。
-eq 兩個整數是否相等
-ne 兩個整數是否不等
-ge 大於
-lt 小於
-ge 大於等於
-le 小於等於
字串比較
通常用來檢查使用者輸入、系統環境等是否滿足條件,在提供互動式操作的Shell指令碼中,也可用來判斷使用者輸入的位置是否符合要求
在進行字串比較時,最好使用雙中括號 [[ ]]. 因為單中括號可能會導致一些錯誤,因此最好避開它們
[[ $str1 = $str2 ]]
操作符 | 意義 |
---|---|
[[ $str1 != $str2 ]] |
如果 str1 與 str2 不相同,則返回真 |
[[ -z $str1 ]] |
如果 str1 是空字串,則返回真 |
[[ -n $str1 ]] |
如果 str1 是非空字串,則返回真 |