Shell指令碼文法 — 條件測試:test 或 [ 命令

來源:互聯網
上載者:User
文章來自:

http://learn.akae.cn/media/ch31s05.html


 Shell指令碼文法 之  條件測試:test 或[

命令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
-gt
3
]
[
命令的四個參數,它們之間必須用空格隔開。命令test
[
的參數形式是相同的,只不過test
命令不需要]
參數。以[
命令為例,常見的測試命令如下表所示:

表 31.2. 測試命令

[ -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語言類似,測試條件之間還可以做與、或、非邏輯運算:

表 31.3. 帶與、或、非的測試命令

[ ! 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


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.