shell基礎篇(五)條件判斷


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM