shell條件測試

來源:互聯網
上載者:User

 

shell條件測試通常都會用在for、while、until、if等控制流程結構中,用於判斷檔案的相關性質或變數的相互關係。

      條件測試用法:test   <運算式>

      結果:成立返回0,不成立返回非0

      查看結果:echo $?

 

以下是幾類常用的測試運算式:

1  檔案狀態測試
-b filename : 當filename 存在並且是塊檔案時返回真(返回0)
-c filename :
當filename 存在並且是字元檔案時返回真
-d pathname : 當pathname 存在並且是一個目錄時返回真
-e pathname
: 當由pathname 指定的檔案或目錄存在時返回真
-f filename : 當filename 存在並且是正規檔案時返回真
-g
pathname : 當由pathname 指定的檔案或目錄存在並且設定了SGID 位時返回真
-h filename : 當filename
存在並且是符號連結檔案時返回真 (或 -L filename)
-k pathname : 當由pathname
指定的檔案或目錄存在並且設定了"粘滯"位時返回真
-p filename : 當filename 存在並且是具名管道時返回真
-r pathname
: 當由pathname 指定的檔案或目錄存在並且可讀時返回真
-s filename : 當filename 存在並且檔案大小大於0
時返回真
-S filename : 當filename 存在並且是socket 時返回真
-t fd  : 當fd
是與終端裝置相關聯的檔案描述符時返回真
-u pathname : 當由pathname 指定的檔案或目錄存在並且設定了SUID 位時返回真
-w
pathname : 當由pathname 指定的檔案或目錄存在並且可寫時返回真
-x pathname : 當由pathname
指定的檔案或目錄存在並且可執行時返回真
-O pathname : 當由pathname 存在並且被當前進程的有效使用者id 的使用者擁有時返回真(字母O
大寫)
-G pathname : 當由pathname 存在並且屬於當前進程的有效使用者id 的使用者的使用者組時返回真
file1 -nt file2
: file1 比file2 新時返回真
file1 -ot file2 : file1 比file2 舊時返回真
舉例: if [ -b
/dev/hda ] ;then echo "yes" ;else echo "no";fi         // 結果將列印 yes;
        
test -c /dev/hda ; echo $?       // 結果將列印 1  ;表示test 命令的傳回值為1,因為/dev/hda
不是字元裝置
        [ -w /etc/passwd ]; echo $?     // 查看對目前使用者而言,passwd
檔案是否可寫

2  測試時使用邏輯操作符
-a 邏輯與,操作符兩邊均為真,結果為真,否則為假。
-o
邏輯或,操作符兩邊一邊為真,結果為真,否則為假。
! 邏輯否,條件為假,結果為真。
舉例: [ -w result.txt -a -w
score.txt ] ;echo $?          // 測試兩個檔案是否均可寫

3  常見字串測試
-z string    :
字串string 為空白串(長度為0)時返回真
-n string    : 字串string 為非空串時返回真
str1 = str2 :
字串str1 和字串str2 相等時返回真
str1 != str2 : 字串str1 和字串str2 不相等時返回真
str1 <
str2 : 按字典順序排序,字串str1 在字串str2 之前
str1 > str2 : 按字典順序排序,字串str1 在字串str2
之後
舉例: name="zqf"; [ $name = "zqf" ];echo $?     // 列印 0 ,表示變數name
的值和字串"zqf"相等

4  常見數值測試
int1 -eq int2 : 如果int1 等於int2,則返回真
int1 -ne
int2 : 如果int1 不等於int2,則返回真
int1 -lt int2 : 如果int1 小於int2,則返回真
int1 -le
int2 : 如果int1 小於等於int2,則返回真
int1 -gt int2 : 如果int1 大於int2,則返回真
int1 -ge
int2 : 如果int1 大於等於int2,則返回真
舉例: x=1 ; [ $x -eq 1 ] ; echo $?       // 將列印 0
表示變數x 的值等於數字1
          x=a ; [ $x -eq "1" ]                     // shell
列印錯誤資訊 [: a: integer expression expected

相關文章

聯繫我們

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