1、單分支if條件語句
1.1、格式一
if [ 條件表達式 ];then
程序
fi
1.2、格式二
if [ 條件表達式 ]
then
程序
fi
注意:
- if語句使用fi結(jié)尾;
- [ 條件表達式 ] 就是前面章節(jié)中將的條件判斷,所以中括號和條件表達式之間必須有空格;
- then后面跟符合條件之后要執(zhí)行的程序,可以放在[]之后,用“;”分割。也可以換行寫;
1.3、判斷根分區(qū)空間使用率
現(xiàn)在我們編寫一個根分區(qū)空間使用率的shell腳本。
腳本作用:當空間使用率大于某個值的時候,要給報出警告。
1.3.1、獲取空間使用率
第一步執(zhí)行命令,輸出空間使用情況:
df -h
執(zhí)行結(jié)果如下圖所示:

根分區(qū)為/dev/vda1,不同的系統(tǒng)結(jié)果可能不一樣。以實際執(zhí)行命令結(jié)果為準。
第二步執(zhí)行命令,篩選出根分區(qū)使用情況:
df -h | grep "/dev/vda1"

第三步執(zhí)行命令,輸出空間使用率:
df -h | grep "/dev/vda1" | awk '{print $5}'

第四步執(zhí)行命令,去除百分號只截取數(shù)值:
df -h | grep "/dev/vda1" | awk '{print $5}' | cut -d "%" -f1
最終結(jié)果:

1.3.2、編寫shell腳本
創(chuàng)建腳本countrate.sh,內(nèi)容如下:
#!/bin/bash
#統(tǒng)計根分區(qū)空間使用情況
#定義變量,把根分區(qū)使用率賦值給rate
rate=$(df -h | grep "/dev/vda1" | awk '{print $5}' | cut -d "%" -f1)
#判斷使用率大于80則輸出警告
if [ $rate -ge 80 ]
then
echo "警告!??!根分區(qū)滿了"
fi
給腳本賦予執(zhí)行權(quán)限:
chmod 755 countrate.sh
執(zhí)行腳本沒有任何輸出。

將腳本判斷規(guī)則更改為大于6%的時候報警,再次執(zhí)行腳本。執(zhí)行結(jié)果如下圖所示:

2、雙分支if條件語句
命令格式如下:
if [ 條件表達式]
then
條件成立時,執(zhí)行的程序
else
條件不成立時,執(zhí)行的另一個程序
fi
2.1、判斷apache是否啟動
2.1.1、獲取apache運行狀態(tài)
在此處,我們使用nmap命令掃描服務(wù)器并截取apache服務(wù)的狀態(tài)。服務(wù)器默認是沒有安裝nmap的,需要自行安裝。
執(zhí)行命令,安裝nmap:
yum -y install nmap
第一步執(zhí)行命令,掃描服務(wù)器獲取到所有的掃描結(jié)果:
nmap -sT 服務(wù)器IP地址

第二步執(zhí)行命令,篩選出http服務(wù):
nmap -sT 服務(wù)器IP地址 | grep http | grep tcp

第二步執(zhí)行命令,獲取到服務(wù)狀態(tài):
nmap -sT 服務(wù)器IP地址 | grep http | grep tcp | awk '{print $2}'

2.1.2、編寫驗證apache服務(wù)狀態(tài)shell腳本
腳本內(nèi)容如下所示:
#!/bin/bash
#定義狀態(tài)變量并且賦值
state=$(nmap -sT 140.143.127.162 | grep http | grep tcp | awk '{print $2}')
if [ "$state" == "open" ]
then
echo "$(date) http is ok!!!" >> /tmp/http-acc.log
else
/etc/rc.d/init.d/httpd start &>/dev/null
echo "$(date) http is restart!!!" >> /tmp/http-err.log
fi
給腳本賦予執(zhí)行權(quán)限:
chmod 755 checkapache.sh
執(zhí)行腳本,然后在/tmp目錄下面可以看到相關(guān)的日志文件。
3、多分支if條件語句
命令格式如下:
if [ 條件表達式1 ]
then
當條件表達式1成立時,執(zhí)行程序1
elif [ 條件表達式2 ]
then
當條件表達式2成立時,執(zhí)行程序2
...省略更多條件...
else
當所有條件都不成立時,最后執(zhí)行此程序
fi