【转载】Linux Shell-条件测试
測試
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???如果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 ]
注:當邏輯非運算符和表達式之間要有空格。
轉載于:https://blog.51cto.com/26610406/1629519
總結
以上是生活随笔為你收集整理的【转载】Linux Shell-条件测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机版网页设计注意事项
- 下一篇: 蓝桥杯 如何计算 X^X = 10 来