標籤:shell指令碼 條件測試運算式
本文的知識點是關於shell指令碼的條件測試的相關內容。
通常在shell指令碼中我們需要做各式各樣的條件判斷,比如,測試一個檔案是否存在、是否為檔案或目錄、是否
具有執行許可權等等,所以在shell指令碼中,條件判斷還是至關重要的。接下來我們進入正題:shell指令碼的條件測試。
1.在bash編程中,條件測試常用的文法形式如下表:
650) this.width=650;" width="600" height="153" title="11.png" style="width:600px;height:153px;" alt="wKiom1j5fizyDo7vAACNxKqRT3g714.png" src="https://s2.51cto.com/wyfs02/M01/91/ED/wKiom1j5fizyDo7vAACNxKqRT3g714.png" border="0" vspace="0" hspace="0" />
提示:
文法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:
[[email protected] ~]# 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.檔案測試運算式:
常用的檔案測試操作符:
650) this.width=650;" width="600" height="180" title="1.png" style="width:600px;height:180px;" alt="wKioL1j9bg-CsQFcAACcr_SHGCU580.png" src="https://s1.51cto.com/wyfs02/M01/92/36/wKioL1j9bg-CsQFcAACcr_SHGCU580.png" border="0" vspace="0" hspace="0" />
提示:
1.測試檔案的讀、寫、可執行等屬性,不光是根據檔案屬性rwx的標識來判斷,還要看當前執行測試的使用者是否
真的可以按照對應的許可權操作該檔案。
2.用[ ]中括弧測試變數時,如果被測試的對象是變數,則需要加雙引號。
3.特殊條件測試運算式案例
以下寫法適用於所有的條件測試運算式,是工作中比較常用的替代if語句的方法。
例1:當條件1成立時,同時執行命令1、命令2、命令3:
650) this.width=650;" width="600" height="237" title="3.png" style="width:600px;height:237px;" alt="wKioL1kAMxHA2WIaAAAheEc8Xao856.png" src="https://s1.51cto.com/wyfs02/M01/92/80/wKioL1kAMxHA2WIaAAAheEc8Xao856.png" border="0" vspace="0" hspace="0" />
上面的判斷,相當於下面的if語句的效果:
650) this.width=650;" width="600" height="97" title="4.png" style="width:600px;height:97px;" alt="wKioL1kAM2eh3_b6AAAMrCYUdVs371.png" src="https://s1.51cto.com/wyfs02/M01/92/80/wKioL1kAM2eh3_b6AAAMrCYUdVs371.png" border="0" vspace="0" hspace="0" />
4.字串測試運算式
字串測試操作符:
650) this.width=650;" width="600" height="166" title="2.png" style="width:600px;height:166px;" alt="wKiom1j9jZbi5raFAAB_axPSFMo751.png" src="https://s2.51cto.com/wyfs02/M02/92/3B/wKiom1j9jZbi5raFAAB_axPSFMo751.png" border="0" vspace="0" hspace="0" />
5.整數二元比較操作符
整數二元比較操作符使用參考:
650) this.width=650;" width="600" height="132" title="3.png" style="width:600px;height:132px;" alt="wKiom1j93EDhVaCVAAArr81gdpQ473.png" src="https://s4.51cto.com/wyfs02/M00/92/47/wKiom1j93EDhVaCVAAArr81gdpQ473.png" border="0" vspace="0" hspace="0" />
提示:
(1)“=”和“!=”也可以在[ ]中作比較使用,但在[ ] 中使用包含“>”和“<”的符號時,需要轉義,有時
不轉義,雖然文法不會報錯,但是結果可能不對。
(2)也可以在[[]]中使用包含“-gt”和“lt”的符號,但是不建議這樣使用。
(3)比較符號兩端也要有空格。
(4)條件測試運算式,注意一般字元比較常用字串比較的方法,即加雙引號比較,而不是使用整數比較的文法,
整數比較容易出錯,除非確定是整數。
推薦使用[]單中括弧的方法進行整數比較。
著重說明:雖然提示中的方法也可使用,但建議按照上述使用參考使用。
6.邏輯操作符
650) this.width=650;" width="600" height="73" title="1.png" style="width:600px;height:73px;" alt="wKiom1kAFrnheX3aAAAolUTwkto595.png" src="https://s2.51cto.com/wyfs02/M01/92/7E/wKiom1kAFrnheX3aAAAolUTwkto595.png" border="0" vspace="0" hspace="0" />
提示:
(1)“-a”和“-o”邏輯操作符需要用於[]中。
(2)“&&”和“||”邏輯操作符號可用於[[]]和(())中,也可以在外部串連多個[]。
(3)注意,在[]和[[]]的兩端,必須要有空格,但是對於(())不需要。
總結:
測試運算式test、[]、[[]]、(())的區別總結:
650) this.width=650;" width="600" height="98" title="2.png" style="width:600px;height:98px;float:left;" alt="wKiom1kAMA_Rp_FLAABAKvhuVVM588.png" src="https://s4.51cto.com/wyfs02/M02/92/80/wKiom1kAMA_Rp_FLAABAKvhuVVM588.png" border="0" vspace="0" hspace="0" />
以上為本人在讀《跟老男孩學Linux營運之shell編程實戰》這本書時的筆記,如有任何著作權問題,請聯絡留言。
本文出自 “shayatou_1990” 部落格,請務必保留此出處http://shayatou1990.blog.51cto.com/12806916/1919584
《跟老男孩學Linux營運之shell編程實戰》-第五章 shell指令碼的條件測試