Shell指令碼語法 條件測試 test

2021-08-31 05:21:35 字數 2033 閱讀 1548

命令test[可以測試乙個條件是否成立,如果測試結果為真,則該命令的exit status為0,如果測試結果為假,則命令的exit status為1(注意與c語言的邏輯表示正好相反)。例如測試兩個數的大小關係:

$ var=2

$ test $var -gt 1

$ echo $?

0$ test $var -gt 3

$ echo $?

1$ [ $var -gt 3 ]

$ echo $?

1

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

,比如,$var-gt3][命令的四個引數,它們之間必須用空格隔開。命令test[的引數形式是相同的,只不過test命令不需要]引數。以[命令為例,常見的測試命令如下表所示:

測試命令

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

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

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

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

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

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

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

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

帶與、或、非的測試命令

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

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

[ expr1 -o expr2 ]expr1expr2可以是上表中的任意一種測試條件,-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

Python基礎語法 條件判斷

目錄 條件判斷 再議 input 小結 計算機之所以能做很多自動化的任務,因為它可以自己做條件判斷。比如,輸入使用者年齡,根據年齡列印不同的內容,在python程式中,用if語句實現 age 20 if age 18 print your age is age print adult 根據pytho...

十九 wxml語法 條件判斷

在框架中,使用wx if 來判斷是否需要渲染該 塊 wx if trueview 也可以用wx elif和wx else來新增乙個else塊 並不是乙個元件,它僅僅是乙個包裝元素,不會在頁面中做任何渲染,只接受控制屬性 因為wx if是乙個控制屬性,需要將它新增到乙個標籤上.如果要一次性判斷多個元件...

shell指令碼及條件測試

bin sh開頭 chmod x filename 後.filename執行 變數都由字串組成 環境變數生成 export 變數 條件測試操作 1.test命令 在shell環境中,可以根據命令執行後的返回狀態值來判斷該命令是否成功執行,當返回值為 0時表示成功執行,否則 非0值 表示執行失敗。te...