1. 程式人生 > 其它 >shell 條件測試語句

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 是非空字串,則返回真
== 等於, 兩端有空格
!= 不等
> 大於
< 小於
-z string 判斷字串是否為空
-n string 判斷字串是否為不空