@(Shell中的控制語句)
1. 條件測試語句
測試語句十Shell的特有功能,Shell提供了一組測試運算符,通過這些運算符,Shell程序能夠判斷某個或者某幾個條件是否成立。
在Shell中用戶可以使用測試語句來測試指定條件表達式的條件的真和假。當指定條件爲真,條件測試的返回值爲0;反之,條件測試的返回值爲非0值。條件測試的語法有兩種,分別是test命令和[]命令
1.1 test語句
test expression
其中,參數expression表示需要進行測試的語句,整個test語句爲真,test返回0,若爲假,則返回非0
==筆者強烈推薦test語句,[]語句十分糟糕,要求十分嚴格,會出現各式各樣的錯誤,不利於初學者學習==
1.2[]語句
[expression]
其中,參數expression的語句與test命令中語法完全相同。條件表達式和左右方括號之間都必須有一個空格
1.3文件測試
文件測試指的是根據給出的路徑,判斷當前路徑下的文件屬性及類型。
test op file
[ op file ]
環境變量 | 說明 |
---|---|
-a | 若文件存在,則條件測試返回結果爲0 |
-b | 若文件存在,且爲塊文件,則條件測試返回結果爲0 |
-c | 若文件存在,且爲字符文件,則條件測試返回結果爲0 |
-d | 若文件存在,且爲目錄文件,則條件測試返回結果爲0 |
-e | 若文件,則條件測試返回爲0 |
-f | 若文件存在,且爲常規文件,則條件測試返回結果爲0 |
-r | 若文件存在且可讀,則條件測試返回結果爲0 |
-w | 若文件存在且可寫,則條件測試返回結果爲0 |
-x | 若文件存在且可執行,則條件測試返回結果爲0 |
-p | 若文件存在且是FIFO文件,則條件測試返回結果爲0 |
-s | 若文件存在且不是空文件,則條件測試返回結果爲0 |
1.4字符串測試
test 操作符
操作符 | 說明 |
---|---|
str | 判斷指定字符串是否爲空 |
str1==str2 | 若字符串相等就爲0 |
-n str | 判斷字符串是否爲非空串,若爲空串則測試結果爲0 |
-z str | 若爲空串,則測試結果爲0 |
1.5數值測試
與字符串類似,數值測試也有兩種形式的語法
test number1 op number2
或者
[ number1 op number2 ]
操作符 | 說明 |
---|---|
n1 -eq n2 | 比較n1是否等於n2,如果等於,則測試結果爲0 |
n1 -ne n2 | 若n1不等於n2,則測試結果爲0 |
n1 -lt n2 | 比較n1是否小於n2,n1如果小於n2,測試結果爲0 |
n1 -le n2 | 比較n1是否小於等於n2,n1如果小於等於n2,測試結果爲0 |
n1 -gt n2 | 比較n1是否大於n2,n1如果大於n2,測試結果爲0 |
n1 -ge n2 | 比較n1是否大於等於n2,n1如果大於等於n2,測試結果爲0 |
1.5邏輯操作符
邏輯操作符相當於c語言中的&&、||、!
|操作符|說明|
|:---:|:---:|
|!exp|邏輯非,條件表達式爲假,則該操作符的運算結果爲真
|exp1 -a exp2|邏輯與,條件exp1和exp2的值都爲真時,整個表達式爲真
|exp1 -o exp2|邏輯或,條件表達式exp1和exp2的值有一個爲真,整個表達式爲真
|(exp)|圓括號,將表達式分組,優先得到結果