Linux 的Shell中存在一組測試命令,該組命令用於測試某種條件或某幾種條件是否真實存在。測試命令是判斷語句和循環語句中條件測試工具,因此,其對於編寫Shell很是重要。express
測試命令用於測試表達式的條件的真假。若是測試的條件爲真,則返回一個0值;若是測試條件爲假,將返回一個非0整數值。編程
測試命令有兩種結構,一種是用test命令進行測試,結構以下:ide
test expression工具
其中,條件expression是一個表達式,該表達式可爲數字、字符串、文本和文件屬性的比較,同時可同時加入各類算術、字符串、文本等運算符。測試
爲了提升命令的可讀性,常常使用第二種格式:spa
[ expression ]orm
其中「[」是啓動測試命令,但要求在expression後要有一個「]」與其配對。使用該命令要特別注意「[」後和「]」前的空格必不可少。第二種格式經常使用。xml
格式:進程
或者
[「num1」 整數比較運算符 「num2」]
整數比較運算符不可用於字符串、文件操做,一樣字符串操做也不可用於其餘的操做,若誤用,將產生沒必要要的錯誤。
整數比較運算符
整數比較運算符 描述
num1 –eq num2 若是num1等於 num2,測試結果爲0
num1 –ge num2 若是num1大於或等於 num2,測試結果爲0
num1 –gt num2 若是num1大於 num2,測試結果爲0
num1 –le num2 若是num1小於或等於 num2,測試結果爲0
num1 –lt num2 若是num1小於 num2,測試結果爲0
num1 –ne num2 若是num1不等於 num2,測試結果爲0
例子:
#num1=13
#[ 「$num1」 –eq 13 ] #測試num1是否等於13
#echo $?
0 #退出狀態爲0,表示num1等於13;反之,退出狀態爲非0.
注:整數比較運算符不適用於浮點型數值比較。
該組字符串能夠用來測試字符串是否爲空、兩個字符串是否相等,經常使用於測試用戶輸入的是否爲空或比較字符串變量
字符串運算符
字符串運算符 描述
string 測試字符串string是否不爲空
-n string 測試字符串string是否不爲空
-z string 測試字符串string是否爲空
string1=string2 測試字符串string1是否與字符串string2相同
string1!=string2 測試字符串string1是否與字符串string2不相同
對於第一種格式,只是用string進行測試時要特別注意該方式只有一種格式:
test string
不存在另外一種格式。字符串比較時建議字符串變量要使用雙引號,即便變量爲空,也要使用雙引號。
例子:
#str1=」」
#test 「$str1」
#echo $?
1 #退出狀態爲1,說明字符串爲空
注:在給字符串變量賦值時,要注意空格對字符串比較的影響。
在Linux Shell中,字符串賦值和整數賦值沒有區別,有時候會出現些許問題
如下這個例子要引發注意:
#var=」007」 #給變量賦值,能夠當作整數,也能夠當作字符串
#[ 「var」 = 」7」 ] #測試變量var的值是否等於字符串7
#echo $?
1
#[ 「$var」 –eq 」7」 ] #測試變量爲var的值是否等於整數7
#echo $?
0
格式:
test 文件操做符 file
或者
[ 文件操做符 file ]
其中file爲文件名、目錄名或者文件路徑等。
文件操做符
文件運算符 描述
-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是否爲符號化連接
例子:
#[ -e file_exam ] #測試file_exam是否存在
注:在之後的Linux Shell編程過程當中,都會用到不少這樣的例子,如建立文件後測試文件是否建立成功,刪除文件後判斷文件是否刪除成功。固然,也能夠經過查看退出狀態,查看文件是否成功建立或者成功刪除。
Linux Shell編程中還有其餘的測試操做符,和上面提到的整數比較運算符、字符串運算符和文件操做符結合使用,進而組合成複雜的測試用於判斷或循環語句中。
邏輯運算符用於測試多個條件是否爲真或爲假,或使用邏輯非測試單個表達式,這些運算符在Shell編程中常常用到,這些條件通常和測試命令聯用。
邏輯操做符
邏輯操做 描述
!expression 若是expression爲假,則測試結果爲真
expression1 –a expression2 若是expression1和expression2同時爲真,則測試結果爲真
expression1 –o expression2 若是expression1和expression2有一個爲真,則測試結果爲真
其中expression爲表達式,該表達式描述了一個測試條件。在邏輯運算符表達式中並非全部的運算符都會被執行。
例:expr1 –a expr2 –a expr3
只有當expr1爲真時,纔會測試expr2,依次。邏輯或運算符相似。
例:[ -e file_exam –a –x file_exam ]
[ 「$integer1」 –lt 20 –o 「integer1」 –gt 30 ]
注:當邏輯非運算符和表達式之間要有空格。