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