自學Linux Shell12.2-test命令

點擊返回 自學Linux命令行與Shell腳本之路html

12.2-test命令

if-then語句不能測試命令退出狀態碼以外的條件,test命令提供了在if-then語句中測試不一樣條件的途徑。shell

  • 若是test命令中列出的條件成立,test命令就會退出並返回狀態碼0
  • 若是test命令中列出的條件不成立,test命令就會退出並返回非0的退出狀態碼,這使得if-thon語句不會在執行

1.  test命令

格式:express

1 test condition

condition是test命令要測試的一系列參數和值。當用在if-then語句中時,test命令以下兩種表示方法:bash

第一種:測試

1 if test condition 2 then
3  command 4 fi
  • 若是不寫test命令的condition部分,以非0的退出狀態碼退出,並執行else語句塊
  • 若是加入一個條件時,test會測試該條件
    若是test命令中列出的條件成立,test命令就會退出並返回狀態碼0
    若是test命令中列出的條件不成立,test命令就會退出並返回非0的退出狀態碼,這使得if-thon語句不會在執行

第二種:spa

1 if [condition]
2 then
3     command
4 fi
  • 第一個方括號和第二個方括號以前必須加上一個空格,不然會報錯 

2.  test命令的3類判斷條件

  • 數值比較 
  • 字符串比較 
  • 文件比較

 2.1 數值比較(最多見)

參數 說明
-eq 等於則爲真
-ne 不等於則爲真
-gt 大於則爲真
-ge 大於等於則爲真
-lt 小於則爲真
-le 小於等於則爲真

可是涉及到浮點值時,數值條件測試會有一個限制。bash shell只能處理整數。命令行

 2.2 字符串比較

參數 說明
= 等於則爲真
!= 不相等則爲真
-z 字符串 字符串的長度爲零則爲真
-n 字符串 字符串的長度不爲零則爲真
< 檢查前面的字符串是否比後面的小
> 檢查前面的字符串是否比後面的大

 

字符串相等性:3d

 在比較兩個字符串的相等性時,比較測試會將全部的標點和大小寫狀況都考慮在內。code

 

字符串順序: htm

 注意問題:

  • 大於號和小於號必須轉義
  • 大於和小於順序和sort命令採用的不一樣
    比較測試中使用標準的ASCII順序,根據每一個字符的ASCII數值來決定排序結果
    sort命令使用的是系統本地化語言設置中定義的排序順序,對於英語,排序中小寫字母出如今大寫字母前面

 

 2.3 文件比較

 

參數 說明
-e 文件名 若是文件存在則爲真
-r 文件名 若是文件存在且可讀則爲真
-w 文件名 若是文件存在且可寫則爲真
-x 文件名 若是文件存在且可執行則爲真
-s 文件名 若是文件存在且至少有一個字符則爲真
-d 文件名 若是文件存在且爲目錄則爲真
-f 文件名 若是文件存在且爲普通文件則爲真
-c 文件名 若是文件存在且爲字符型特殊文件則爲真
-b 文件名 若是文件存在且爲塊特殊文件則爲真
file1 -nt file2 檢查file1是否比file2新
file1 -ot file2 檢查file1是否比file2舊

舉例1:

上面代碼使用了-d測試條件來檢查用戶的$HOME目錄是否存在。若是它存在的話,它將繼續使用cd命令來切到$HOME目錄並進行顯示目錄下的文件。

 舉例2:

-e比較容許你在腳本中使用對象前檢查文件或目錄對象是否存在,而後上面代碼表示若不存在建立一個新文件testing

舉例3:

-e比較適用於文件和目錄。但要肯定指定的對象是個文件,必須用-f比較

3. 複合條件測試

if-then語句容許使用布爾邏輯來組合測試。有兩種布爾運算符可用: 

  • [ condition1 ]&&[ condition1 ] 必須都知足 
  • [ condition1 ] || [ condition1 ] 知足一種便可

if-then語句容許使用布爾邏輯來組合測試。有兩種布爾運算符可用: 

 

以上解釋以下,若是var一、var2同時知足大於15,輸出$$;若是var一、var2有一個知足大於15,輸出||;不然輸出not

4 . if-then的高級特性

  • 用於數學表達式的雙括號 ((expression)) 
  • 用於高級字符串處理功能的雙方括號 [[ expression ]]

4.1 使用雙括號 

雙括號的命令格式以下: 

1 ((expression))

expression能夠是任意的數學賦值或比較表達式。 

  • 在雙括號結構中,全部表達式能夠像c語言同樣,如:a++,b–等。 
  • 在雙括號結構中,全部變量能夠不加入:「$」符號前綴。 
  • 雙括號能夠進行邏輯運算,四則運算 
  • 雙括號結構 擴展了for,while,if條件測試運算 
  • 支持多個表達式運算,各個表達式之間用「,」分開 
  • 不須要將雙括號中表達式裏的判斷符號轉義

4.2 使用雙方括號 

雙方括號的命令格式以下: 

1 [[expression]]

expression使用了test命令中採用的標準字符串比較。

相關文章
相關標籤/搜索