Shell學習之條件測試

2021-08-19 04:01:24 字數 1766 閱讀 9610

命令test或 [ 可以測試乙個條件是否成立,如果測試結果為真,則該命令的exit status為

0,如果測試結果為假,則命令的

exit status為1

(注意與

c語言的邏輯表示正好相反)。例如測試兩個數的大小關係:

itcast@ubuntu:~$ var=2

itcast@ubuntu:~$ test $var -gt 1

itcast@ubuntu:~$ echo $?

0itcast@ubuntu:~$ test $var -gt 3

itcast@ubuntu:~$ echo $?

1itcast@ubuntu:~$ [ $var -gt 3 ]

itcast@ubuntu:~$ echo $?

1itcast@ubuntu:~$

雖然看起來很奇怪,但左方括號 [ 確實是乙個命令的名字,傳給命令的各引數之間應該用空格隔開,比如:$var、

-gt、3、

]是 [ 命令的四個引數,它們之間必須用空格隔開。命令test或

[的引數形式是相同的,只不過test命令不需要

]引數。以 [ 命令為例,常見的測試命令如下表所示:

[ -d dir ] 如果dir存在並且是乙個目錄則為真

[ -f file ] 如果file存在且是乙個普通檔案則為真

[ -z string ] 如果string的長度為零則為真

[ -n string ] 如果string的長度非零則為真

[ string1 = string2 ] 如果兩個字串相同則為真

[ string1 != string2 ] 如果字串不相同則為真

[ arg1 op arg2 ] arg1和arg2應該是整數或者取值為整數的變數,op是-eq(等於)-ne(不等於)-lt(小於)-le(小於等於)-gt(大於)-ge(大於等於)

之中的乙個

和c語言類似,測試條件之間還可以做與、或、非邏輯運算:

[ ! expr ] expr可以是上表中的任意一種測試條件,!表示「邏輯反(非)」

[ expr1 -a expr2 ] expr1和expr2可以是上表中的任意一種測試條件,-a表示「邏輯與」

[ expr1 -o expr2 ] expr1和expr2可以是上表中的任意一種測試條件,-o表示「邏輯或」

例如:

$ var=abc

$ [ -d desktop -a $var = 'abc' ]

$ echo $?

0注意,如果上

例中的$var變數事先沒有定義,則被

shell

展開為空字串,會造成測試條件的語法錯誤(展開為

[ -d desktop -a =

『abc』 ]

),作為一種好的shell程式設計習慣應該總是把變數取值放在雙引號之中(展開為[ -d desktop -a 「」 = 『

abc』 ]):

$ unset var

$ [ -d desktop -a $var = 'abc' ]

bash: [: too many arguments

$ [ -d desktop -a "$var" = 'abc' ]

$ echo $?

1

shell學習之條件測試

test命令用於測試檔案狀態 數字和字串,expr命令測試和執行數值輸出。退出狀態可用 檢視,0表示正確,其他數字表示錯誤。test test命令有兩種格式 1 test 2 注意 兩端都要有空格。常用於測試檔案狀態的選項如下 1 d 目錄 2 s 檔案長度大於0 非空 3 f 正規檔案 4 w 可...

shell之條件測試

1 test一般有兩種格式,即 test condition 或 condition 使用方括號時,要注意在條件兩邊加上空格。測試檔案狀態是否為o k,但是有時要比較兩個檔案狀態。s h e l l提供三種邏輯操作完成此 功能。a 邏輯與,操作符兩邊均為真,結果為真,否則為假。o 邏輯或,操作符兩邊...

shell條件測試

shell條件測試通常都會用在for while until if等控制流結構中,用於判斷檔案的相關性質或變數的相互關係。條件測試用法 test 表示式 結果 成立返回0,不成立返回非0 檢視結果 echo 以下是幾類常用的測試表示式 1 檔案狀態測試 b filename 當filename 存在...