shell腳本語言之if條件判斷語句實(shí)例詳解
1.單分支if條件語句
then后面跟符合條件之后執(zhí)行的程序,可以放在[]之后,用;分隔。也可以換行寫入,
就不需要“;”了。
比如:
if [ 條件判斷式 ]
then
程序
fi
1.1舉例:判斷目錄是否存在,不存在則創(chuàng)建
#!/bin/bash #date:2022-4-13 #描述:if單分支語句示例,判斷目錄是否存在 read -p "請輸入需要判斷的目錄:" name if [ ! -d $name ] then echo "$name目錄不存在,正在創(chuàng)建..." mkdir -p $name echo "$name目錄創(chuàng)建完成." fi echo "$name目錄已存在,正在退出..."
2.雙分支if條件語句
if [ 條件判斷式 ]
then
條件成立時(shí),執(zhí)行的程序。
else
條件不成立時(shí),執(zhí)行的另一個(gè)程序。
fi
2.1舉例:監(jiān)聽并自動重啟apache服務(wù)腳本
在日常工作中,服務(wù)器上的服務(wù)經(jīng)常會宕機(jī)。如果我們對服務(wù)器監(jiān)控不好,就會造成服務(wù)器中服務(wù)宕機(jī)了,而管理員卻不 知道的情況。這是我們可以寫一個(gè)腳本來監(jiān)聽本機(jī)的服務(wù)。如果服務(wù)停止或宕機(jī)了,可以自動重啟這些服務(wù)。用apache舉例:
首先介紹端口掃描命令
nmap端口掃描命令,
格式:nmap -sT 域名或IP
子選項(xiàng):
-s 掃描
-T 掃描所有開啟的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命令查看是否開啟apache并賦值給port。
然后進(jìn)行條件判斷。如果服務(wù)開啟,輸出當(dāng)前時(shí)間+httpd is ok 到/tmp/autostart-
acc.log。
如果變量port的值不是open,那么執(zhí)行else下操作。首先啟動apache服務(wù),將啟動后 信息輸出至位桶,然后在/tmp/autostart-err.log中記錄。在本次腳本中nmap命令使用的是
IP查找端口,但并未指DNS,所以會報(bào)DNS不存在的錯(cuò),但不影響結(jié)果。)
3.多分支if條件語句
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舉例:判斷用戶輸入的是文件還是目錄
#!/bin/bash #date:2022-4-13 #描述:判斷文件類型 read -p "請輸入一個(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是其他類型文件" fi
4.case條件語句
多分支case條件語句
case $變量名 in
“值1”)
如果$變量等于值1,則執(zhí)行程序1
;;
“值2”)
如果$變量等于值2,則執(zhí)行程序2
;;
....省略...
*)
如果$變量的值不是以上值,則執(zhí)行此程序
;;
esac
4.1舉例:創(chuà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)建啟動腳本,讓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腳本語言之if條件判斷語句的文章就介紹到這了,更多相關(guān)shell腳本if條件判斷語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux壓縮及解壓縮命令tar|zip|rar|xz操作方法
不管Linux還是其他操作系統(tǒng),數(shù)據(jù)的壓縮和解壓縮操作是經(jīng)常用到的,在windows平臺文件的相關(guān)操作被傻瓜化了,到了Linux平臺讓好多小伙伴感覺有點(diǎn)束手無策,本文為大家講解Linux的常用壓縮包操作,格式包含tar.gz, .tgz, .tar.bz2, .zip, .rar, .tar.xz,感興趣的朋友一起看看吧2024-02-02linux shell流程控制語句實(shí)例講解(if、for、while、case語句實(shí)例)
linux shell有一套自己的流程控制語句,其中包括條件語句(if),循環(huán)語句(for,while),選擇語句(case)。下面我將通過例子介紹下,各個(gè)語句使用方法2014-04-04shell腳本學(xué)習(xí)指南[四](Arnold Robbins & Nelson H
這篇文章主要介紹了shell腳本學(xué)習(xí)指南[四](Arnold Robbins & Nelson H.F. Beebe著),需要的朋友可以參考下2014-02-02零基礎(chǔ)入門篇之Linux及Arm-Linux程序開發(fā)筆記
這篇文章主要介紹了零基礎(chǔ)入門篇之Linux及Arm-Linux程序開發(fā)筆記,需要的朋友可以參考下2015-10-10