《跟老男孩學Linux運維之shell編程實戰》-第五章 shell腳本的條件測試

 本文的知識點是關於shell腳本的條件測試的相關內容。

   通常在shell腳本中我們需要做各式各樣的條件判斷,比如,測試一個文件是否存在、是否爲文件或目錄、是否

具有執行權限等等,所以在shell腳本中,條件判斷還是至關重要的。接下來我們進入正題:shell腳本的條件測試。

1.在bash編程中,條件測試常用的語法形式如下表:

wKiom1j5fizyDo7vAACNxKqRT3g714.png

提示:

  • 語法1中的test命令和語法2中的[]是等價的。語法3中的[[]]雙中括號爲擴展的test命令。

    語法4中的(())常用於計算。

  • 在雙中括號[[]]中可以使用通配符等進行模式匹配,這是其區別於其他幾種語法格式的地方。

  • &&、||、>、<等操作符可以應用於雙中括號{[[]]中,但不能應用於單中括號[]中,在[]中一般用-a、-o、

    -gt(用於整數)、-lt(用於整數)代替上述操作符。

  • 對於整數的關係運算,也可以是使用shell的算術符(())。


下面具體介紹一下常用條件測試的語法:

(1)test條件測試的簡單語法及示例:

test條件測試的語法格式:test 條件表達式

例1:測試文件file是否存在:

test -f file && echo true || echo false 

==>測試file文件是否存在,,如果存在則輸出true,否則輸出false

例2:測試字符串的長度是否爲0:

[root@www ~]# test -z "XiaoYu" && echo true || echo false
false

==>如果測試字符串的長度爲0,則表達式成立,因爲測試的字符串爲XiaoYu,不爲0,則表達式的結果爲false。

(2)[ ]中括號條件測試語法及示例

語法格式:[ 條件測試表達式 ]   ==>中括號兩端要有空格

例1:測試file文件是否存在:

[ -f file ] && echo 1 || echo 2 ==>測試文件file是否存在,存在返回1,不存在返回0。

(3)` `雙中括號條件測試語法及示例

語法格式:[[ 條件測試表達式 ]]  ==>雙中括號裏的兩端也要有空格

例1:` -f file ` && echo 1 || echo 0 ==>測試文件file是否存在,如存在則返回1,不存在返回0。

提示:

` `中,可以使用通配符等進行模式匹配,並且&&、||、>、<等操作符可以應用在` `中,但不能應用於[ ]中,

在[ ]中一般使用-a、-o、-gt(用於整數)、-lt(用於整數)等操作符代替上文提到的用於` `中的符號。

提示:

   雖然[[]]的應用場景不多,但在[[]]通配符匹配的場景下,其他的測試表達式無法替代,如果需要通配符匹配

或正則匹配就用[[]]。

2.文件測試表達式:

常用的文件測試操作符:

wKioL1j9bg-CsQFcAACcr_SHGCU580.png

提示:

1.測試文件的讀、寫、可執行等屬性,不光是根據文件屬性rwx的標識來判斷,還要看當前執行測試的用戶是否

真的可以按照對應的權限操作該文件。

2.用[ ]中括號測試變量時,如果被測試的對象是變量,則需要加雙引號。

3.特殊條件測試表達式案例

以下寫法適用於所有的條件測試表達式,是工作中比較常用的替代if語句的方法。

例1:當條件1成立時,同時執行命令1、命令2、命令3:

wKioL1kAMxHA2WIaAAAheEc8Xao856.png

上面的判斷,相當於下面的if語句的效果:

wKioL1kAM2eh3_b6AAAMrCYUdVs371.png

4.字符串測試表達式

字符串測試操作符:

wKiom1j9jZbi5raFAAB_axPSFMo751.png

5.整數二元比較操作符

整數二元比較操作符使用參考:

wKiom1j93EDhVaCVAAArr81gdpQ473.png

提示:

(1)“=”和“!=”也可以在[ ]中作比較使用,但在[ ] 中使用包含“>”和“<”的符號時,需要轉義,有時

不轉義,雖然語法不會報錯,但是結果可能不對。

(2)也可以在[[]]中使用包含“-gt”和“lt”的符號,但是不建議這樣使用。

(3)比較符號兩端也要有空格。

(4)條件測試表達式,注意普通字符比較常用字符串比較的方法,即加雙引號比較,而不是使用整數比較的語法,

     整數比較容易出錯,除非確定是整數。

推薦使用[]單中括號的方法進行整數比較。

着重說明:雖然提示中的方法也可使用,但建議按照上述使用參考使用。

 6.邏輯操作符

wKiom1kAFrnheX3aAAAolUTwkto595.png

提示:

(1)“-a”和“-o”邏輯操作符需要用於[]中。

(2)“&&”和“||”邏輯操作符號可用於[[]]和(())中,也可以在外部連接多個[]。

(3)注意,在[]和[[]]的兩端,必須要有空格,但是對於(())不需要。

總結:

測試表達式test、[]、[[]]、(())的區別總結:

wKiom1kAMA_Rp_FLAABAKvhuVVM588.png







以上爲本人在讀《跟老男孩學Linux運維之shell編程實戰》這本書時的筆記,如有任何版權問題,請聯繫留言。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章