寫腳本時;有時要判斷字符串是否相等,數字測試。這對后面學習的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 cls: 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 $b5[db17 ~]$ unset b[db17 ~]$ echo $b[db17 ~]$ [ $b ][db17 ~]$ echo $?1
命令執行結果
一個命令執行的結果也可以充當條件判斷;若有幾個命令;是拿最后一個命令充當結果的判斷
[db17 ~]$ lsa b bin lottu[db17 ~]$ echo $?0[db17 ~]$ cd li0924-bash: cd: li0924: No such file or directory[db17 ~]$ echo $?1[db17 ~]$ ls;cd li0924a b bin lottu-bash: cd: li0924: No such file or directory[db17 ~]$ echo $?1
[note]這篇在后面的if...then...fi 是條件語句會經常用到。到時候好好學習吧!大家覺得對你有幫助就點個贊
新聞熱點
疑難解答