linux條件測試

測試

Linux Shell中存在一組測試命令,該組命令用於測試某種條件或某幾種條件是否真實存在。測試命令是判斷語句和循環語句中條件測試工具,所以,其對於編寫Shell非常重要。

測試結構

測試命令用於測試表達式的條件的真假。如果測試的條件爲真,則返回一個0值;如果測試條件爲假,將返回一個非0整數值

測試命令有兩種結構,一種是用test命令進行測試,結構如下:

test  expression

其中,條件expression是一個表達式,該表達式可爲數字、字符串、文本和文件屬性的比較,同時可同時加入各種算術、字符串、文本等運算符。

爲了提高命令的可讀性,經常使用第二種格式:

[ expression ]

其中“[”是啓動測試命令,但要求在expression後要有一個“]”與其配對。使用該命令要特別注意“[”後和“]”前的空格必不可少。第二種格式常用。

整數比較運算符

格式:

test num1 整數比較運算符 num2

或者

[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   如果expression1expression2同時爲真,則測試結果爲真

expression1 –o expression2   如果expression1expression2有一個爲真,則測試結果爲真

其中expression爲表達式,該表達式描述了一個測試條件。在邏輯運算符表達式中並不是所有的運算符都會被執行。

例:expr1 –a expr2 –a expr3

只有當expr1爲真時,纔會測試expr2,依次。邏輯或運算符類似。

例:[ -e file_exam –a –x file_exam ]

       [ “$integer1” –lt 20 –o “integer1” –gt 30 ]

注:當邏輯非運算符和表達式之間要有空格。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章