shell腳本語(yǔ)言之if條件判斷語(yǔ)句實(shí)例詳解
1.單分支if條件語(yǔ)句
then后面跟符合條件之后執(zhí)行的程序,可以放在[]之后,用;分隔。也可以換行寫(xiě)入,
就不需要“;”了。
比如:
if [ 條件判斷式 ]
then
程序
fi
1.1舉例:判斷目錄是否存在,不存在則創(chuàng)建
#!/bin/bash
#date:2022-4-13
#描述:if單分支語(yǔ)句示例,判斷目錄是否存在
read -p "請(qǐng)輸入需要判斷的目錄:" name
if [ ! -d $name ]
then
echo "$name目錄不存在,正在創(chuàng)建..."
mkdir -p $name
echo "$name目錄創(chuàng)建完成."
fi
echo "$name目錄已存在,正在退出..."
2.雙分支if條件語(yǔ)句
if [ 條件判斷式 ]
then
條件成立時(shí),執(zhí)行的程序。
else
條件不成立時(shí),執(zhí)行的另一個(gè)程序。
fi
2.1舉例:監(jiān)聽(tīng)并自動(dòng)重啟apache服務(wù)腳本
在日常工作中,服務(wù)器上的服務(wù)經(jīng)常會(huì)宕機(jī)。如果我們對(duì)服務(wù)器監(jiān)控不好,就會(huì)造成服務(wù)器中服務(wù)宕機(jī)了,而管理員卻不 知道的情況。這是我們可以寫(xiě)一個(gè)腳本來(lái)監(jiān)聽(tīng)本機(jī)的服務(wù)。如果服務(wù)停止或宕機(jī)了,可以自動(dòng)重啟這些服務(wù)。用apache舉例:
首先介紹端口掃描命令
nmap端口掃描命令,
格式:nmap -sT 域名或IP
子選項(xiàng):
-s 掃描
-T 掃描所有開(kāi)啟的TCP端口
nmap掃描后顯示的端口一定是存活的。
腳本要使用nmap命令,首先用yum -y install nmap安裝。
apache服務(wù)也是yum安裝。
[root@xiaopeng ~]# cat autostart.sh
#!/bin/bash
port=$(nmap -sT 192.168.22.222 | grep tcp | grep http | awk '{print $2}')
if [ "$port" == "open" ]
then
echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log
else
/etc/rc.d/init.d/httpd start &> /dev/nullecho "$(date) restart httpd!!" >> /tmp/autostart-err.log
fi
(首先用nmap命令查看是否開(kāi)啟apache并賦值給port。
然后進(jìn)行條件判斷。如果服務(wù)開(kāi)啟,輸出當(dāng)前時(shí)間+httpd is ok 到/tmp/autostart-
acc.log。
如果變量port的值不是open,那么執(zhí)行else下操作。首先啟動(dòng)apache服務(wù),將啟動(dòng)后 信息輸出至位桶,然后在/tmp/autostart-err.log中記錄。在本次腳本中nmap命令使用的是
IP查找端口,但并未指DNS,所以會(huì)報(bào)DNS不存在的錯(cuò),但不影響結(jié)果。)
3.多分支if條件語(yǔ)句
if [ 條件判斷式1 ]
then
當(dāng)條件判斷式1成立時(shí),執(zhí)行程序1。
elif [ 條件判斷式2 ]
then
當(dāng)條件判斷式2成立時(shí),執(zhí)行程序2。
......(可加入更多條件)
else
當(dāng)所有條件不成立時(shí),最后執(zhí)行此程序。
fi
3.1舉例:判斷用戶(hù)輸入的是文件還是目錄
#!/bin/bash
#date:2022-4-13
#描述:判斷文件類(lèi)型
read -p "請(qǐng)輸入一個(gè)文件:" file
if [ -z $file ]
then
echo "錯(cuò)誤!輸入的文件為空."
elif [ ! -e $file ]
then
echo "錯(cuò)誤!輸入的文件不存在."
elif [ -f $file ]
then
echo "$file是一個(gè)普通文件"
elif [ -d $file ]
then
echo "$file是一個(gè)目錄"
else
echo "$file是其他類(lèi)型文件"
fi
4.case條件語(yǔ)句
多分支case條件語(yǔ)句
case $變量名 in
“值1”)
如果$變量等于值1,則執(zhí)行程序1
;;
“值2”)
如果$變量等于值2,則執(zhí)行程序2
;;
....省略...
*)
如果$變量的值不是以上值,則執(zhí)行此程序
;;
esac
4.1舉例:創(chuàng)建啟動(dòng)腳本,讓service命令管理apache
[root@xiaopeng htdocs]# vim /etc/init.d/apached
#!/bin/bash
# chkconfig: 2345 64 36
# description: A very fast and reliable SQL database engine
httpd=/usr/local/apache2/bin/apachectl
case $1 in
start)
$httpd start
;;
stop)
$httpd stop
;;
restart)
$0 stop
sleep 0.05
$0 start
;;
configtest)
$httpd -t
;;
*)
echo "usage:$0 start|stop|restart|configtest."
;;
esac
4.2舉例:創(chuàng)建啟動(dòng)腳本,讓service命令管理nginx
[root@xiaopeng conf]# vim /etc/init.d/nginx
#!/bin/bash
#Author:liu
#chkconfig: 2345 99 33
#description: nginx server control tools
ngxc="/usr/local/nginx/sbin/nginx"
ngxc_fpm="/usr/local/php/sbin/php-fpm"
case "$1" in
start)
$ngxc -t &> /dev/null
if [ $? -eq 0 ];then
$ngxc
$ngxc_fpm
echo "nginx service start success!"
else
$ngxc -t
fi
;;
stop)
$ngxc -s stop
killall php-fpm
echo "nginx service stop success!"
;;
restart)
$0 stop
$0 start
;;
reload)
$ngxc -t &> /dev/null
if [ $? -eq 0 ];then
$ngxc -s reload
pkill -HUP php-fpm
echo "reload nginx config success!"
else
$ngxc -t
fi
;;
*)
echo "please input stop|start|restart|reload."
exit 1
esac總結(jié)
到此這篇關(guān)于shell腳本語(yǔ)言之if條件判斷語(yǔ)句的文章就介紹到這了,更多相關(guān)shell腳本if條件判斷語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用scp獲取遠(yuǎn)程linux服務(wù)器上的文件 linux遠(yuǎn)程拷貝文件
scp是secure copy的簡(jiǎn)寫(xiě),用于在Linux下進(jìn)行遠(yuǎn)程拷貝文件的命令,scp傳輸是加密的,下面看一下詳細(xì)使用方法吧2014-01-01
jq命令對(duì)JSON進(jìn)行過(guò)濾遍歷結(jié)構(gòu)轉(zhuǎn)換等操作實(shí)例
這篇文章主要介紹了jq命令對(duì)JSON進(jìn)行過(guò)濾遍歷結(jié)構(gòu)轉(zhuǎn)換等操作實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
shell腳本編程之case語(yǔ)句學(xué)習(xí)筆記
這篇文章主要介紹了shell腳本編程之case語(yǔ)句學(xué)習(xí)筆記,本文代碼中包含注釋來(lái)說(shuō)明case語(yǔ)句的使用,需要的朋友可以參考下2014-09-09
5個(gè)Shell腳本編程入門(mén)練習(xí)例子
這篇文章主要介紹了5個(gè)Shell腳本編程入門(mén)例子,涵蓋了各種操作,又有一些游戲的性質(zhì),作為入門(mén)練習(xí)例子是不很不錯(cuò)的,需要的朋友可以參考下2014-06-06
一個(gè)強(qiáng)大的網(wǎng)絡(luò)分析shell腳本分享(實(shí)時(shí)流量、連接統(tǒng)計(jì))
這篇文章主要介紹了一個(gè)強(qiáng)大的網(wǎng)絡(luò)分析shell腳本分享,此腳本包含實(shí)時(shí)流量統(tǒng)計(jì)、連接統(tǒng)計(jì)強(qiáng)大功能,需要的朋友可以參考下2014-12-12
高級(jí)開(kāi)發(fā)運(yùn)維測(cè)試必須掌握的envsubst命令使用詳解
這篇文章主要為大家介紹了高級(jí)開(kāi)發(fā)運(yùn)維測(cè)試必須掌握的envsubst命令使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Linux下利用Opencv打開(kāi)筆記本攝像頭問(wèn)題
這篇文章主要介紹了Linux下利用Opencv打開(kāi)筆記本攝像頭問(wèn)題,需要的朋友可以參考下2017-08-08

