標籤:shell linux 條件判斷
1. 退出狀態
在Linux系統中,每當一條命令執行完成後,系統都會返回一個退出狀態,這個狀態被存放在$? 這個變數中,是一個整數值,我們可以根據這個值來判斷命令啟動並執行結果是否正確。
通常情況下,退出狀態值為0,表示執行成功,不為0的時候表示執行失敗。
POSIX規定的退出狀態和退出狀態的含義:
0 運行成功
1-255 運行失敗,指令碼命令、系統命令錯誤或參數傳遞錯誤
126 找到了該命令但無法執行
127 未找到要啟動並執行命令
128 命令被系統強行結束
2. 測試命令
用test命令進行測試,expression是一個運算式:
test expression
為了提高可讀性,可以使用另一種格式:
[ expression ]
需要注意的是大括弧和運算式之間需要有一個空格,不能省略。這種方式和if、case、while等語句結合,可以作為shell指令碼中的判斷條件。
3. 整數比較子
在shell中對兩個數進行比較,不像在C/C++中可以使用“>”之類的運算子,而是使用類似參數選項的格式。
-eq 如果等於則為真
-ge 如果大於或等於則為真
-gt 如果大於則為真
-le 如果小於或等於則為真
-lt 如果小於則為真
-ne 如果不等於則為真
其中的參數可以這樣理解e(equal),g(greater),t(than),l(less),n(not),這樣方便記憶。
4. 字串相關運算子
-n string 字串不為空白則為真
-z string 字串為空白則為真
string1 = string2 字串相等則為真 (或者 == 也可以)
string1 != string2 字串不等則為真
這裡有一個需要注意的地方,就是使用 -n 這個運算子進行判斷的時候需要注意在變數兩邊加上雙引號。
例如 if [ -n $string ] 應該寫成 if [ -n “$string” ] ,不然該運算式總是會返回真,因為當string變數為空白的時候就相當於是 if [ -n ]。
5. 檔案操作符
-d file 測試file是否為目錄
-e file 測試file是否存在
-f file 測試file是否為普通檔案
-r file 測試file是否是進程可讀檔案
-s file 測試file的長度是否不為0
-w file 測試file是否是進程可寫檔案
-x file 測試file是否是進程可執行檔
-L file 測試file是否符號化連結
6. 邏輯運算子
! expression 非
expression1 –a expression2 與
expression1 –o expression2 或
多重的嵌套:
例如 if [ $a == 1 ] && [ $b == 1 -o $b == 3 ]
linux shell中的條件判斷