shell指令碼的條件測試與比較
一、shell指令碼的條件測試
通常,在bash的各種條件結構和流程控制結構中都要進行各種測試,然後根據測試結構執行不同的操作,有時也會與if等條件語句相結合,來完成測試判斷,以減少程式執行的錯誤。
執行條件測試表示式後通常會返回"真"或"假",就行執行命令後返回的值為0表示真,非0表示假一樣。
bash程式設計中條件測試常用的語法:
條件測試語法
說明語法一:test《測試表示式》
這是利用test命令進行測試表示式的方法。test命令和"《測試表示式》"之間至少有乙個空格;
語法二:[《測試表示式》]
這是通過(單中括號)進行條件測試表示式的方法,和test命令的用法相同。的邊界和內容之間至少有乙個空格;
語法三:[[《測試表示式》]]
這是通過(雙中括號)進行條件測試表示式的方法。是比test和更新的語法格式。的邊界和內容之間至少有乙個空格;
語法四:((《測試表示式》))
這是通過(())(雙小括號)進行條件測試表示式的方法,一般用於if語句裡。(())(雙小括號)兩端不需要有空格;
針對上**有幾個注意事項需要說明下:
語法一中的test命令和語法二中的是等價的。語法三種的為擴充套件的test命令,語法四中的(())常用語計算,建議使用相對友好的語法二,即中括號的語法格式;
在中可以使用萬用字元等進行模式匹配,這是區別於其他幾種語法格式的地方;
&&、||、>、<\等操作符可以應用於中,但不能應用於中,在中一般用-a、-o、-gt(用於整數)、-lt(用於整數)代替上述操作符;
對於整數的關係運算,也可以使用shell的算數運算子(());
示例:
test -f file && echo true || echo false
二、檔案測試表示式
常用檔案測試操作符
說明-d檔案,d的全拼為directory
檔案存在且為目錄則為真,即測試表示式成立;
-f檔案,f的全拼為file
檔案存在且為普通檔案則為真,即測試表示式成立;
-e檔案,e的全拼為exist
檔案存在則為真,即測試表示式成立。區別於"-f","-e"不能辨別是目錄還是檔案;
-r檔案,r的全拼為read
檔案存在且可讀測試為真,即測試表示式成立;
-s檔案,s的全拼為size
檔案存在且檔案大小不為0則為真,即測試表示式成立;
-w檔案,w的全拼為write
檔案存在則可寫為真,即測試表示式成立;
-x檔案,x的全拼為executable
檔案存在且可執行為真,即測試表示式成立;
-l檔案,l的全拼為link
檔案存在且鏈結檔案則為真,即測試表示式成立;
f1 -nt f2,nt的全拼為newer than
檔案f1比檔案f2新則為真,即測試表示式成立。根據檔案的修改時間來計算;
f1 -ot f2,nt的全拼為older than
檔案f1比檔案f2舊則為真,即測試表示式成立。根據檔案的修改時間來計算;
這些操作符號對於、、test的測試表示式幾乎是通用的。
三、字元測試表示式
字串測試操作符的作用包括;比較兩個字串是否相同、測試字串的長度是否為零,字串是否為null等;
常用字串測試操作符
說明-n"字串"
若字串的長度不為0,則為真,即測試表示式成立,n可以理解為no zero;
-z"字串"
若字串的長度為0,則為真,即測試表示式成立,z可以理解為zero的縮寫;
"串1"=串2'
若字串1等於字串2,則為真,即測試表示式成立,可以用"=="代替"=";
"串1"!="串2"
若字串1不等於字串2,則為真,即測試表示式成立,但不能用"!=="代替"!=";
對於字串的測試,一定要將字串加雙引號之後在進行比較。如[-n $myvar],特別是使用的場景;
比較符號(例如=和!=)的兩端一定要有空格;
"!="和"="可用於比較兩個字串是否相同;
示例:
[root@shell ~]# [ -n "abc" ] && echo 1 || echo 0 #如果字串長度不為0,則輸出1,否則輸出0;
#因為字串為abc,長度不為0,因此為真,輸出1;
四、整數二元比較操作符
在以及test中使用的比較符號
在(())和中使用的比較符號
說明-eq
==或=
相等,全拼為equal
-ne!=
不相等,全拼為not equal
-gt>
大於,全拼為gerater than
-ge>=
大於等於,全拼為gerater equal
-lt<
小於,全拼為less than
-le<=
小於等於,全拼為less equal
以下是針對上述符號的特別說明:
1、"="和"!="也可以在中作比較使用,但在中使用包含">"和"<"的符號時,需要用反斜線轉義,有時不轉義雖然語法不會報錯,但是結果可能會不對;
2、也可以在中使用包含"-gt"和"-lt"的符號,但是不建議這樣使用;
3、比較符號兩端也要有空格;
示例:
[root@shell ~]# [ 2 = 1 ] && echo 1 || echo 0
0 [root@shell ~]# [ 2 \< 1 ] && echo 1 || echo 0
0 五、邏輯操作符
在和test中使用的操作符
在和(())中使用的操作符
說明-a
&&and,與,兩端都為真,則結果為真
-o||
or,或,兩端有乙個為真,則結果為真!!
not,非,兩端相反,則結果為真
邏輯操作符前後的表示式是否成立,一般用真假來表示;
"!"的中文意思是反,即與乙個邏輯值相反的邏輯值;
-a的中文意思是"與"(and或&&),前後兩個邏輯值都為"真",綜合返回值才為"真",反之為"假";
-o的中文意思是"或"(or或||),前後2個邏輯值只要有乙個為"真",返回值就為"真";
連線兩含、test或的表示式可用&&或||;
示例:
[root@shell ~]# [ -f /etc/hosts -a -f /etc/services ] && echo 1 || echo 0
1 [root@shell ~]# [[ -f /etc/hosts && -f /etc/services ]] && echo 1 || echo 0
1 說明:-a和&&的運算規則:只有邏輯操作符兩端的表示式都成立時才為真;真(true)表示成立,對應的數字為1;假(false)表示不成立,對應的數字為0。
六、測試表示式test、、、(())的區別總結
測試表示式操作符
test
(())
邊界是否需要空格
需要需要
需要不需要
邏輯操作符
!、-a、-o
!、-a、-o
!、&&、||
!、&&、||
整數比較操作符
-eq、-gt、-lt、-ge、-le
-eq、-gt、-lt、-ge、-le
-eq、-gt、-lt、-ge、-le或=、>、<、>=、<=
=、>、<、>=、<=
字串比較操作符
=、==、!=
=、==、!=
=、==、!=
=、==、!=
是否支援通配匹配符
不支援不支援
支援不支援
shell指令碼及條件測試
bin sh開頭 chmod x filename 後.filename執行 變數都由字串組成 環境變數生成 export 變數 條件測試操作 1.test命令 在shell環境中,可以根據命令執行後的返回狀態值來判斷該命令是否成功執行,當返回值為 0時表示成功執行,否則 非0值 表示執行失敗。te...
Shell指令碼的條件測試和if條件語句使用方法
一 條件測試操作 要使shell指令碼程式具備一定的 智慧型 面臨的第乙個問題就是如何區分不同的情況以確定執行何種操作。shell環境根據命令執行後的返回狀態值 來判斷是否執行成功,當返回值為0時表示成功,否則 非0值 表示失敗或異常。使用專門的測試工具 test命令,可以對特定條件進行測試,並根據...
1 3 Shell指令碼條件測試
布林變數中真為0,假為1。所以可以根據測試機制來判斷語句的返回值。測試機制可以使用下面語法實現 test表示式或 表示式 或 表示式 表示式前後必須有空格。注意 表示式一般用於 中 擴充套件的正規表示式 根據命令的返回值,可以使用邏輯運算讓語句有條件的執行。bin bash 計算第乙個檔案中空行數 ...