shell腳本編程:bash shell中的條件判斷

shell的條件判斷主要分爲三大部分的內容:

  • 條件測試類型

  • 條件測試表達式

  • 語句之間的邏輯關係

條件測試表達式

    1、表達式的寫法:

        [ expression ]

        ` expression `

        test expression

    2、條件測試表達式的注意事項:

        [ expression ] expression 和中括號之間是有空格,如果沒有空格將會報錯。

        [ expression ] ` expression ` 作用相同,但是含義不同。

        test expression 其中test是shell提供的一個命令。其返回結構是expression的邏輯結果

    3、何時需要使用 [ expression ]

        當bash shell的腳本中出現 類似-gt,-lt這樣的整數測試符或者 -e $FILE 這樣的文件測試符的時間纔可以使用[],

        if [ grep 'root' /etc/passwd ] 這樣是錯誤的。

        if 可以直接使用 grep 'root' /etc/passed的命令結果的。

        [root@bogon sh]# cat if.sh
        #!/bin/bash
        if grep 'root' /etc/passwd &> /dev/null ;then
            echo "there is root "
          else
          echo "there is no root"
        fi
        [root@bogon sh]# ./if.sh
        there is root

        從命令的執行結果可以知道:if 可以取得grep命令的執行結果。相當與執行來grep命令後的$?的值。此處,我們也需要仔細理解何時需要使用 &>/dev/null 如果我們需要命令執行的返回值,那麼不許要使用 &>/dev/null ,如果我們需要命令執行結果,也就是說相當與命令執行完成後的$?值,那麼,就需要使用&>/dev/null.


條件測試類型:對shell而言,常用的條件測試類型有三種:整數測試;字符串測試;文件測試


整數測試:


測試符用法舉例含義
-gt[ $A -gt $B ]gt:great then 如果$A大於$B 結果爲真,否則結果爲假。
-lt[ $A -lt $B ]lt:less then 如果$A小於$B結果爲真,否則爲假
-eq[ $A -eq $B ]eq:equal 如果$A 等於$B 結果爲真,否則結果爲假
-ge[ $A -ge $B ]如果$A大於等於$B結果爲真,否則結果爲假
-le [ $A -le $B ]如果$A小於$B結果爲真,否則結果爲假
-ne[ $A -ne $B ]如果$A不等於$B 結果爲真,否則結果爲假

其中整數測試需要注意的事項有:

  • 整數測試的運算符都是雙目運算符

  • 測試符的兩側數據只能是整數。浮點數是不可以的。

  • 測試數與中括號是有空格符的。


字符串測試:可以分別用操作符 =、 !=、< 和 > 比較字符串是否相等、不相等或者第一個字符串的排序在第二個字符串的前面或後面。單目操作符 -z 測試 null 字符串,如果字符串非空 -n 返回 True(或者根本沒有操作符)。


= :[  'abc' = 'dcf' ] # 判斷=兩側的字符串是否一樣 #注意區分下面的例子。

[root@localhost sh]# [ 'abc' = 'dcf' ];echo $?

1

[root@localhost sh]# [ 'abc'='dcf' ];echo $? 

0


!=  [ 'abc' != 'dcf' ] #判斷兩個字符串是否不等,不等爲真,否則未見

[root@localhost sh]# [ 'abc' != 'dcf' ];echo $?

0


<   [ 'abc' \< 'bcd' ]  # 判斷後面的字符串是否在前面的字符串的前面

[root@bogon testdir]# [ 'abc' \< 'bcd' ] ; echo $?
0


> 同理,判斷前面的字符串排序是否在後面字符串的前面


字符串測試單目操作符: -z ,-n

[root@bogon testdir]# [ -n 'abc' ];echo $?
0
[root@bogon testdir]# [ -n '' ];echo $?
1

[ -n $STRING ] 如果$STRING 是空,則返回爲真,否則返回爲假。


[root@bogon testdir]# [ -z 'abc' ]; echo $?
1
[root@bogon testdir]# [ -z ' ' ];echo $?
1
[root@bogon testdir]# [ -z  ];echo $?
0
[root@bogon testdir]# [ -z $STRING ] ;echo $?
0

[ -z $STRING ] 如果$STRING 爲NULL,或者根本沒有定義,返回爲真,否則返回爲假。


小結:

    字符串測試符號,中有單目運算符 [ -n $STRING  ]  [ -z $STRING ] 也有雙目運算符,= ;!=;

<; > 需要注意的-z -n的區別,和<,>需要使用轉義字符\


文件測試

測試符
用法舉例
含義
-f
[  -f $FILE ]
如果$FILE是普通文件,返回真,否則返回假
-d
[ -d $FILE  ]
如果$FILE是目錄,返回真,否則返回假
-r
[ -r $FILE ]
如果$FILE 是可讀的,返回真,否則返回假
-w
[ -w $FILE ]
如果$FILE 是可寫的,返回真,否則返回假
-x
[ -x $FILE ]
如果$FILE 是可執行的,返回真,否則返回假
-s
[ -s $FILE ]
如果$FILE是非空的,返回真,否則返回假
-e
[ -e $FILE ]
如果$FILE 是存在的,返回真,否則返回假

注意:

$FILE,需要路徑,也就是腳本能找到的路徑。


語句間的邏輯關係:

&&:邏輯與

||    ; 邏輯或


command1 && command2;

如果com1 返回值是假,那麼com2不會執行

如果com1 返回只是真,那麼com2一定要執行,二者執行的結果決定com1 && com2的返回結果


com1 || com2

如果com1 執行結果爲真,那麼com2不會執行,

如果com1執行結果爲假,那麼com2一定要執行,二者執行的結果決定com1 || com2的返回的結果


以上就是短路邏輯的實例。



條件測試是shell腳本的基礎,涉及的內容包括,測試表達式的寫法,條件測試的分類,各種測試符的使用。也包括語句之間的邏輯關係。需要特別理解短路邏輯的含義。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章