寫腳本時;有時要判斷字符串是否相等,數字測試。這對后面學習的shell語句,循環,條件語句做好基礎。
條件判斷格式
1. test condition : test命令
2. [ condition ] : []
3. 命令執行的結果 :例如cd lottu.
注意:使用[] 要注意在條件兩邊要加上空格。
文件狀態測試
操作符 | 說明 | 舉例 |
-b file | 檢測文件是否是塊設備文件,如果是,則返回 true。反之;返回 false。 | [ -b $file ] |
-c file | 檢測文件是否是字符設備文件,如果是,則返回 true。反之;返回 false。 | [ -c $file ] |
-d file | 檢測文件是否是目錄,如果是,則返回 true。反之;返回 false。 | [ -d $file ] |
-f file | 檢測文件是否是普通文件(既不是目錄,也不是設備文件),如果是,則返回 true。 | [ -f $file ] |
-r file | 檢測文件是否可讀,如果是,則返回 true。 | [ -r file ] |
-w file | 檢測文件是否可寫,如果是,則返回 true。 | [ -w file ] |
-x file | 檢測文件是否可執行,如果是,則返回 true | [ -x file ] |
-s file | 檢測文件是否為空(文件大小是否大於0),不為空返回 true。 | [ -s file ] |
-e file | 檢測文件(包括目錄)是否存在,如果是,則返回 true。 | [ -e file ] |
測試結果如下: |
[db17 ~]$ test -f a [db17 ~]$ echo $? 0 [@db17 ~]$ test -f c [@db17 ~]$ echo $? 1 [@db17 ~]$ ls c ls: c: No such file or directory [@db17 ~]$ echo $? 2 [@db17 ~]$ test -d lottu [@db17 ~]$ echo $? 0
關系運算符
運算符 | 說明 | 舉例 |
-eq | 檢測兩個數是否相等,相等返回 true | [ 1 -eq 1 ]返回 true |
-ne | 檢測兩個數是否相等,不相等返回 true | [ 10 -eq 8 ] 返回 true |
-gt | 檢測左邊的數是否大於右邊的,如果是,則返回 true。 | NA |
-lt | 檢測左邊的數是否小於右邊的,如果是,則返回 true。 | NA |
-ge | 檢測左邊的數是否大等於右邊的,如果是,則返回 true | NA |
-le | 檢測左邊的數是否小於等於右邊的,如果是,則返回 true。 | NA |
== | 相等。用於比較兩個數字,相同則返回 true。 | [ $a == $b ] |
!= | 不相等。用於比較兩個數字,不相同則返回 true | [ $a != $b ] |
備注:1. 關系運算符只支持數字,不支持字符串,除非字符串的值是數字。
2. 判斷兩個數是否相等;還可以用 "==", "!=" 。也是數字專用。
其中var=10
[db17 ~]$ [ ${var} == 5 ] [db17 ~]$ echo $? 1 [db17 ~]$ [ ${var} -lt 5 ] [db17 ~]$ echo $? 1 [db17 ~]$ [ ${var} -gt 5 ] [db17 ~]$ echo $? 0 [db17 ~]$ [ ${var} -eq 5 ] [db17 ~]$ echo $? 1
布爾運算符
運算符 | 說明 | 舉例 |
! | 非運算,表達式為 true 則返回 false,否則返回 true。 | [ ! false ] |
-o | 或運算,有一個表達式為 true 則返回 true | [ $a -lt 20 -o $b -gt 100 ] |
-a | 與運算,兩個表達式都為 true 才返回 true | [ $a -lt 20 -a $b -gt 100 ] |
測試
b=5 [db17 ~]$ [ ! $b == 5 ] [db17 ~]$ echo $? 1 [db17 ~]$ [ ! -f a ] #判斷文件是否是普通文件 [db17 ~]$ echo $? 1
字符串運算符
運算符 | 說明 | 舉例 |
= | 檢測兩個字符串是否相等,相等返回 true | [ 'a' = 'ab' ]返回false |
!= | 檢測兩個字符串是否相等,不相等返回 true | NA |
-z | 檢測字符串長度是否為0,為0返回 true | [ -z $a ] |
-n | 檢測字符串長度是否為0,不為0返回 true | [ -n $a ] |
str | 檢測字符串是否為空,不為空返回 true | [ $a ] |
其實就兩組相反的,是否相等,是否為空 |
備注:[ $a ]這個有點意思。跟awk相同;雖然用法沒awk那么靈活。
[17 ~]$ [ $b ] [db17 ~]$ echo $? 0 [db17 ~]$ echo $b 5 [db17 ~]$ unset b [db17 ~]$ echo $b [db17 ~]$ [ $b ] [db17 ~]$ echo $? 1
命令執行結果
一個命令執行的結果也可以充當條件判斷;若有幾個命令;是拿最后一個命令充當結果的判斷
[db17 ~]$ ls a b bin lottu [db17 ~]$ echo $? 0 [db17 ~]$ cd li0924 -bash: cd: li0924: No such file or directory [db17 ~]$ echo $? 1 [db17 ~]$ ls;cd li0924 a b bin lottu -bash: cd: li0924: No such file or directory [db17 ~]$ echo $? 1
[note]
這篇在后面的if...then...fi 是條件語句會經常用到。到時候好好學習吧!大家覺得對你有幫助就點個贊