寫腳本時;有時要判斷字符串是否相等,數字測試。這對后面學習的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 是條件語句會經常用到。到時候好好學習吧!大家覺得對你有幫助就點個贊
