命令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 存在...