linux中Shell腳本應用(二)

Shell腳本應用(二)

[重點]

Ø整數值比較/邏輯測試

ØIf語句的結構及應用

2.1條件測試操作

Shell環境根據命令執行後的返回狀態值($?)來判斷是否執行成功。當返回值爲0時表示成功,否則(非0值)表示失敗或異常

使用專門的測試工具---test命令,可對特定條件進行測試,並根據返回值來判斷條件(返回值0表示條件成立)

使用test測試包括兩種形式:

Test 條件表達式或者      [  條件表達式 ]

這兩種方式作用完全相同,但通常後一種形式更爲常用。

注意:方括號[  ]與條件表達式之間需要至少一個空格進行分隔

比較常用的條件操作:

文件測試、整數值比較、字符竄比較、以及針對抖個條件的邏輯測試。

1.文件測試:根據給定的路徑名稱,判斷對應的是文件還是目錄,或者判斷文件上是否可讀、可寫、可執行等。

常見的操作選項如下:使用時將測試對象放在操作選項之後即可

l-d:測試是否爲目錄(directory

l-e:測試目錄或文件是否存在(exsit

l-f:測試文件或目錄是否存在(file

l-r:測試當前用戶是否有權限讀取(read

l-w:測試當前用戶是否有權限寫入(write

l-x:測試是否設置有可執行(excute)權限

[  -d  /media/cdrom/ ]

    Echo  $?

    Ls  -ld /media/cdrom/

爲了更直觀的查看測試結果,可以結合命令分隔符“&&”和echo命令一起使用,當條件成立時直接輸出“yes”。其中“&&”符號表示“而且”的關係,只有當前前邊的命令執行成功後纔會執行後邊的命令,否則後邊的命令將會被忽略。

列:[  -d  /media/cdrom/Server/  ] && echo “YES”

2.整數值比較:根據給定的兩個整數值,判斷第1個數是否大於、等於、小於….2個數

整數值比較的常用操作選項如下:(使用時將操作選項放在要比較的兩個整數之間)

l-eq:第1個數等於(equal)第2個數

l-ne:第1個數不等於(not  equal)第2個數

l-gt:第1個數大於(greater than)第2個數

l-lt:第1個數小於(lesser than)第2個數

l-le:第1個數小於等於(lesser or equal)第2個數

l-ge:第1個數大於等於(greater or equal)第2個數

列:who |wc  -l

[  $Unum -gt  5  ] &&  echo “Too many”

Free –m: 表示已MB爲單位輸出內存信息

列:freeCC=$(free  -m | grep “cache:”| awk ‘{print $4}’)

[  $freeCC -lt  1024  ] &&  echo   ${freeCC}MB

3.字符串比較:通常用來檢查用戶輸入/系統環境是否滿足條件

在提供交互式操作的shell腳本中,也可用於判斷用戶輸入參數是否符合要求

字符串常用操作選項:

l=:1個字符串與第2個字符串相同

l!=:1個字符串與第2個字符串不相同,其中!取反的意思

l-z:檢查字符是否爲空(zero),對於未定義或賦予空值的變量視爲空串

:echo  $LANG        //查看當前語言環境

 [  $LANG !=  “en.US”  ] &&  echo  “Not en.US”   //字符串測試結果

shell腳本應用中,經常需要用戶輸入yesno來確認某個任務

: read  -p “是否覆蓋現有文件(yes/no)?”  ACK

  [  $ACK  =“yes” ]  &&  echo “覆蓋

4.邏輯測試:判斷兩個或多個條件之間的依賴關係

常用邏輯測試的操作選項:

l&&:邏輯與,表示“而且”的意思,只有當前後兩個條件都成立時,整個測試名令的返回值才爲0(結果成立)。使用test名令時,“||”可改爲“-a

l||:邏輯或,表示“或者”的意思,只要前後兩個條件中有一個成立時,整個測試名令的返回值才爲0(結果成立)。使用test名令時,“||”可改爲“-o

l! :邏輯否,表示“不”的意思,只有當條件不成立時,整個測試名令的返回值才爲0(結果成立)。

注:  “&&” “||”通常也用於間隔不同名令操作

如:make  &&  make install          

列:判斷當前linux系統內核版本是否大於2.4

  Uname  -r

 Mnum= $(uname –r | awk  -F.  ‘{print $1}’)

 Snum=$(uname  -r  | awk -F. ‘{print $2}’)

 [  $Mnum  -eq 2 ]  &&  [ $Snum  -gt 4 ]  && echo  “符合要求

2.2使用if語句

使用專用的if語句,可以更好的整理腳本結構,使得層次分明,清晰易懂

2.2.1 If語句結構

shell腳本應用中,if語句是最常用的一種流程控制方式。

If選擇結構可以分爲三種不同的基本類型:適用於不同的應用場合。

1.單分支結構

If語句的“分支”指的的是不同測試結果對應的執行語句(一條或多條)。

對於單分支語句,只有在“條件成立”時纔會執行相應的代碼,否則不作任何操作。

單分支If語句語法格式:

if 條件測試

                    then  

                       命令序列

                    fi


單分支If結構的執行流程:

首次判斷條件測試的操作結果,如果返回值爲0 表示條件成立,則執行then後面的名令序列,一直到遇見fi爲止表示結束,繼續執行其他腳本代碼;如果返回值不爲0,則忽略then後面的命令序列,直接跳至fi 行以後執行其他腳本代碼。

單分支If語句結構:

2.雙分支的if語句

雙分支的if語句格式:if  條件測試操作

                then

命令序列1

                 else

                           命令序列2

                fi

雙分支的if結構執行流程:

首先判斷條件測試的操作結果,如果條件成立,則執行then後面的命令序列1,忽略else及後面的命令序列2,直到遇見fi 結束判斷;如果條件不成立,則忽略then後面的命令序列1,直接跳至else及後面的命令序列2執行,直到遇見fi 結束判斷。

雙分支的if語句結構:

3.多分支的if語句

多分支的if語句的語法格式:if  條件測試操作1

then

命令序列1

                            elif  條件測試操作2

                             Then

                                  命令序列2

                             else

                                   命令序列2

                              fi

多分支的if結構的執行流程:

首先判斷條件測試的操作1的結果,如果條件1成立,則執行命令序列1,然後跳至fi 結束判斷;如果條件1不成立,則繼續判斷條件測試操作2的結果,如果條件2成立,則執行命令序列2,然後跳至fi 結束判斷;……如果所有的條件多不滿足,則執行else後面的命令序列n,然後遇見fi 結束判斷。

多分支的if語句結構:

2.2.2 if語句應用

單分支語句應用:

列:vi /opt/chkifroot.sh

#!/bin/bash

If [  “$USER”  !=”root” ]

then

 echo “錯誤:非root用戶,權限不足

exit  1     //非正常退出

fi

#chmod  +x  chkifroot.Sh

#/opt/chkfiroot.sh

列:

雙分支 if語句應用:

編寫連通性測試腳本pinghost.sh

列:vi pinghost.sh

  #!/bin/bash

 Ping  -c 3  -I 0.2 –w 3 $1 &>  /dev/null

 If  [  $? –eq  0  ]

 then

Echo “host  $1 is up”

    else

      Echo  “host  $1 is down ”

   fi

#chmod +x pinghost.sh

#./pinghost.sh 192.168.4.1

多分枝語句因應用:

根據多個互斥的條件執行不同的操作,實際等同於嵌套使用的if語句。

編寫一個成績分檔的腳本

列: vi  gradediv.sh

#!/bin/bash

Read –p “請輸入您的分數(0-100”  GRADE

If  [  $GRADE –ge $5  ] && [  $GRADE -le  100  ]

Then

 Echo  “ $GRADE 分,優秀

elif [  $GRADE  -ge 70  ]  && [ $GRADE  -le  84  ]

then

 echo “$GRADE 分,合格

else

  echo  “$GRADE 分,不合格

f

#chmod  +x  gradeediv.sh

#./ gradeediv.sh



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