Shell指令碼的條件測試與比較

2022-08-03 01:00:17 字數 3846 閱讀 2270

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 計算第乙個檔案中空行數 ...