《跟老男孩學Linux營運之shell編程實戰》-第五章 shell指令碼的條件測試

來源:互聯網
上載者:User

標籤: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指令碼的條件測試

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.