shell流程控制語句之一if判斷

        上篇博文將到了for循環的使用,接下來就講講if條件判斷,在說if之前需要講條件測試因爲這些流程控制語句都是固定格式,只有將那些條件測試語句理解了那麼流程控制就沒有什麼問題了。

        條件測試方法:

        1.text expression

        2.[ expression ]

        3.` expression `

        4.命令執行的狀態結果

        先說命令執行的狀態結果:一個命令執行後一般會有兩種狀態,一種爲命令執行後返回給終端的結果,一種爲命令執行後的狀態結果,狀態結果其實就是是否執行成功:0代表成功1-255代表不成功。

        如果不明白就看下圖吧

wKioL1SCdEHx6LnrAAG6LWZCdfA674.jpg

        首先我使用ls列出當前目錄的內容,程序返回了ls的執行結果,然而只看執行結果並不能確定程序是否達到你要的內容就像下面的我隨便給了一個目錄程序返回一個失敗的結果,這樣我們的程序就並沒有執行成功。$?爲一個特殊變量可以查看上一條命令是否執行成功。第一次使用ls列出了目錄內容使用$?返回0則代表成功第二次則返回的值爲2代表不成功1-255任意數字都代表不成功

        然後再來看下剩下的條件測試方法。

        第一個test expression,我們在終端輸入test ls,判斷執行成功與否還是通過$?這個變量來實現,由於這個並不常用不做過多演示。

        第二個和第三個就普遍常用了,我比較常用[] 使用哪一個完全看情況而定。要注意的是中括號裏面的內容要有空白字符與中括號隔開不然會報錯的。wKioL1SCd76RgI3SAAEAQErKQI8134.jpg

        這裏是判斷1是否等於0(當然是不想等)如果不相等則輸出1中間的||是判斷前面的條件是否爲真,如果爲真||後面的不做執行如果爲假則執行||後面的內容

        平常使用的還有&&和!,&&則代表當前面的內容執行的結果爲真則繼續執行後面的內容,如果前面執行失敗則不執行後面的內容。

        !是取反操作:[ !1 -eq 0 ] && echo "1"意思是如果1不等於0則輸出1。

        這個方法通常用於條件判斷裏面而&&和||也可以直接用於平常命令當中如:ls /etc/ && echo "hello,world"代表了當ls /etc執行成功後輸出hello,world這個字符串。

        接下來講一講測試表達式吧

        整數測試:

         a -eq b : a等於b

            -gt     :    大於

            -ge    :    大於等於

            -lt      :    小於

            -le     :    小於等於

            -ne    :    不等於

注:這個示例上面就演示過了這裏不再演示,在後面實例中還會出現。

        字符測試:

            >、<、>=、 <=、 ==(等於) !=(不等於) 

            -z:判斷是否爲空,空爲真,非空爲假

            -n:是否非空,非空爲真,空爲假

看下示例:

wKioL1SCfLmBXwnmAAFKdiMGhGo176.jpg

        我先定義一個變量b並賦值爲123,接下來第二行判斷如果$b爲空則輸出123,第三行則判斷如果$b不空則輸出123。

        現在說一說if語句的結構:

        if 單支語句結構:

        if 條件 ;then

            執行內容

        fi

還是以上面的做演示吧,如果$b爲空則輸出123否則不做任何操作,用單支if語句寫出來的內容則爲:

        if [ -z $b ];then

            echo "123"

        fi

        是不是很類似,其實與[ -z $b ] && echo "123" 是一樣的它並沒有什麼特別難得,只要能明確知道判斷條件就可以完成操作,這個就不貼圖了。

        if 雙支語句結構:

        if 條件;then

            執行“內容”

        else

            執行“內容1”

        fi

        意思就是:如果條件爲真則執行“內容”如果條件爲假則執行“內容1”,如果不用if來達到這種效果的話格式就爲 

        [ -z $b ] && echo "123" || echo "321"

        如果$b爲空則輸出123如果$b不爲空則輸出321,來看下吧,效果是一樣的。

wKioL1SChj7wnLYfAAFeCz_MjqY768.jpg

        接下來說下if的多支語句格式:

        if 條件;then

            執行“內容”

        elif 條件;then

            執行“內容1”

        else

            執行“內容2”

        fi

        意思爲:如果條件爲真則執行“內容”如果條件不爲真再判斷條件是否爲別的結果如果爲真則執行“內容1”,假如以上內容都不符合則執行“內容2”

        還是用$b來做演示,如果$b=0 輸出“123” 如果$b=1輸出“321”如果都不符合條件則輸出"213",用多支if語句來寫的話就是:

        if [ $b -eq 0 ];then

            echo "123"

        elif [ $b -eq 1 ];then

            echo "321"

        else

            echo "213"

        fi

wKioL1SCiJPQeCnZAAGb-QQyqMc834.jpg


以下內容則爲實例,多動手操作。

0x01:添加10個用戶,當用戶不存在時添加,存在則不添加

        #!/bin/bash

        for i in {1..10};do

            if ! id user${i} &> /dev/null ;then

                useradd user${i}

            fi

        done

        注:其中的 &> /dev/null是指將!id user的執行結果送到/dev/null中不管id user命令執行的結果是什麼,我只需要它的狀態結果如果狀態結果爲1則添加用戶,如果爲0則不添加用戶

wKiom1SCib3S5P9rAAE46cwaZRM114.jpg

0x02:使用ping命令來探測192.168.1.0網段存活主機,並將存活主機輸出出來,這個腳本執行時間可能有點長如果需要取消則可以一直按住Ctrl+c直到腳本結束即可

        #!/bin/bash

        for i in {1..254};do

            if ping -c 1 -w 1 192.168.1.$i &> /dev/null

                echo "192.168.1.$i"

            fi

        done

wKiom1SCi-nwFipqAAFEw9Z0uNs666.jpg


        在後面的內容還會介紹到 while 循環,case循環(精簡的if語句)隨機數$RANDOM的使用。


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