W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
if條件測試語句可以讓腳本根據實際情況自動執(zhí)行相應的命令。從技術角度來講,if語句分為單分支結構、雙分支結構、多分支結構;其復雜度隨著靈活度一起逐級上升。
if條件語句的單分支結構由if、then、fi關鍵詞組成,而且只在條件成立后才執(zhí)行預設的命令,相當于口語的“如果……那么……”。單分支的if語句屬于最簡單的一種條件判斷結構,語法格式如圖4-17所示。
圖4-17 單分支的if語句
下面使用單分支的if條件語句來判斷/media/cdrom文件是否存在,若存在就結束條件判斷和整個Shell腳本,反之則去創(chuàng)建這個目錄:
[root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
由于第5章才講解用戶身份與權限,因此這里繼續(xù)用“bash 腳本名稱”的方式來執(zhí)行腳本。在正常情況下,順利執(zhí)行完腳本文件后沒有任何輸出信息,但是可以使用ls命令驗證/media/cdrom目錄是否已經成功創(chuàng)建:
[root@linuxprobe ~]# bash mkcdrom.sh
[root@linuxprobe ~]# ls -d /media/cdrom
/media/cdrom
if條件語句的雙分支結構由if、then、else、fi關鍵詞組成,它進行一次條件匹配判斷,如果與條件匹配,則去執(zhí)行相應的預設命令;反之則去執(zhí)行不匹配時的預設命令,相當于口語的“如果……那么……或者……那么……”。if條件語句的雙分支結構也是一種很簡單的判斷結構,語法格式如圖4-18所示。
圖4-18 雙分支的if條件語句
下面使用雙分支的if條件語句來驗證某臺主機是否在線,然后根據返回值的結果,要么顯示主機在線信息,要么顯示主機不在線信息。這里的腳本主要使用ping命令來測試與對方主機的網絡聯(lián)通性,而Linux系統(tǒng)中的ping命令不像Windows一樣嘗試4次就結束,因此為了避免用戶等待時間過長,需要通過-c參數來規(guī)定嘗試的次數,并使用-i參數定義每個數據包的發(fā)送間隔,以及使用-W參數定義等待超時時間。
[root@linuxprobe ~]# vim chkhost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi
我們在4.2.3小節(jié)中用過$?變量,作用是顯示上一次命令的執(zhí)行返回值。若前面的那條語句成功執(zhí)行,則$?變量會顯示數字0,反之則顯示一個非零的數字(可能為1,也可能為2,取決于系統(tǒng)版本)。因此可以使用整數比較運算符來判斷$?變量是否為0,從而獲知那條語句的最終判斷情況。這里的服務器IP地址為192.168.10.10,我們來驗證一下腳本的效果:
[root@linuxprobe ~]# bash chkhost.sh 192.168.10.10
Host 192.168.10.10 is On-line.
[root@linuxprobe ~]# bash chkhost.sh 192.168.10.20
Host 192.168.10.20 is Off-line.
if條件語句的多分支結構由if、then、else、elif、fi關鍵詞組成,它進行多次條件匹配判斷,這多次判斷中的任何一項在匹配成功后都會執(zhí)行相應的預設命令,相當于口語的“如果……那么……如果……那么……”。if條件語句的多分支結構是工作中最常使用的一種條件判斷結構,盡管相對復雜但是更加靈活,語法格式如圖4-19所示。 第4章 Vim編輯器與Shell命令腳本。第4章 Vim編輯器與Shell命令腳本。
圖 4-19 多分支的if條件語句
下面使用多分支的if條件語句來判斷用戶輸入的分數在哪個成績區(qū)間內,然后輸出如Excellent、Pass、Fail等提示信息。在Linux系統(tǒng)中,read是用來讀取用戶輸入信息的命令,能夠把接收到的用戶輸入信息賦值給后面的指定變量,-p參數用于向用戶顯示一定的提示信息。在下面的腳本示例中,只有當用戶輸入的分數大于等于85分且小于等于100分,才輸出Excellent字樣;若分數不滿足該條件(即匹配不成功),則繼續(xù)判斷分數是否大于等于70分且小于等于84分,如果是,則輸出Pass字樣;若兩次都落空(即兩次的匹配操作都失敗了),則輸出Fail字樣:
[root@linuxprobe ~]# vim chkscore.sh
#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):88
88 is Excellent
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):80
80 is Pass
下面執(zhí)行該腳本。當用戶輸入的分數分別為30和200時,其結果如下:
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):30
30 is Fail
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):200
200 is Fail
為什么輸入的分數為200時,依然顯示Fail呢?原因很簡單—沒有成功匹配腳本中的兩個條件判斷語句,因此自動執(zhí)行了最終的兜底策略??梢?,這個腳本還不是很完美,建議讀者自行完善這個腳本,使得用戶在輸入大于100或小于0的分數時,給予Error報錯字樣的提示。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: