91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shell編程之if語句的示例分析

發布時間:2021-06-10 11:22:05 來源:億速云 閱讀:336 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Shell編程之if語句的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

一、if條件語句

1、單分支語句結構

第一種語法如下:

if <條件表達式> 
 then 
 指令 
fi

第二種語法

if <條件表達式>; then 
 指令 
fi

在以上這兩種方式中我還是喜歡用第一種,這個是看個人習慣的。在上面的兩個語法中<條件表達式>可以是 test [] [[]] (())等條件表達式,甚至可以使用命令作為條件表達式。注意:每個if語句都是以if開頭 fi結束,中間并帶有then;

其實很簡單,舉個例子如下:

if [ -f file ] 
 then 
 echo "是一個普通文件" 
 else 
 echo "不是一個普通文件" 
 exit 1 
fi

剖析:如果file是一個普通文件,那么就執行echo "是一個普通文件"  否則 輸出一條"不是一個普通文件" 最后退出腳本

其實以下的這段命令更能清晰的了解if語句如下:

如果 <你不會if語句> 
 那么 
 那肯定長的不帥 
果如

2、以上就是單分支的if語句,接下來看看雙分支的if語法結構

if <條件表達式> 
 then 
 指令一 
 else 
 指令二 
fi

以上就是單分支的if語句結構,那么在舉個例子如下:

if [ -f file ] 
 then 
 echo "這是一個普通文件" 
 else 
 echo "NONONO" 
fi

這個和以上的例子是一樣的。同樣是測試file是不是一個普通文件,如果是,那么就輸出指令1 否則那么就輸出指令2

到這里我們在來一個形象描述

如果 <你不會if語句> 
 那么 
  就快點學,快點練 
 否則 
  你永遠都不可能學會 
果如

我們發現 單分支和雙分支的區別就在于一個有else 一個沒有。

3、多分支if語句結構

我們在上面說了 單分支和雙分支 這里又有了一個多分支,我們可以理解為雙分支里面包含了單分支,那么多分支里面肯定包含了單分支+雙分支:個人理解,好像有點繞? 先來看看多分支吧 如下:

if 語句多分支結構主體為:如果.....那么....否則如果.....那么.....否則如果.....那么,,,,

例1:

if [ -f file ] 
 then 
 echo "yes yes yes" 
elif [ -z file ] 
 then 
 echo "yes yes" 
else 
 echo "nonono" 
fi

解釋如下圖:

Shell編程之if語句的示例分析

看完圖還是沒理解? 沒有關系 如下:

Shell編程之if語句的示例分析

到這里應該是沒有問題了~~

單分支if條件語句實踐

把下面的測試文件中條件表達式改為if條件語句

[root@shell-yankerp sh]# [ -f file ] && echo "yes" || echo "no" 
yes

修改如下:

if [ -f file ] 
 then 
 echo "yes" 
 else 
 echo "no" 
fi

運行結果如下:

[root@shell-yankerp sh]# [ -f file ] && echo "yes" || echo "no" 
yes 
[root@shell-yankerp sh]# sh cs.sh 
yes 
[root@shell-yankerp sh]# cat cs.sh 
#!/bin/bash 
# Maintenance:<ywyankerp@163.com> 
# BINLOG:www.ywyankai.cn 
# DATE:03:31:35 CST, Sunday, 02 month, 2018, 04 
# Test scripts 
 
if [ -f file ] 
 then 
 echo "yes" 
 else 
 echo "no" 
fi 
[root@shell-yankerp sh]#

到這里if的一些基本語法應該掌握了,那么我們接下來,來點實際的。

實戰1:開發shell腳本檢測Nginx服務是否正常啟動 如果宕機,那么就設置郵箱報警!!!

其實此章有很多的案例,但是還是那句話,我還是想用我的思想來編寫整個腳本,這樣能表達出來我的整個過程!

首先我們要知道為什么要寫這個腳本?,我們的目的是要干什么?最后需要實現什么樣的效果?,寫了這個腳本到底能實現什么樣的功能? 我感覺這個是我們首先需要考慮的問題。隨后我們就可以帶著這些問題,去編寫我們的shell腳本

那么我們可以根據以上的需求分為三塊 如:如何查看Nginx服務是否啟動?  我們如何查看Nginx服務宕機時候的一些情況。 最后我們需要知道我們用什么樣的工具來實現這個郵箱報警。

1、如何查看Nginx啟動?

我們可以通過netstat -anput | grep nginx 來查看Nginx是否啟動如下:

Shell編程之if語句的示例分析

首先通過上圖我們得到的信息是:我們可以通過上面那條命令來查看,那么接下來我們肯定是需要寫在腳本中的,通過我們的if條件測試語句來寫,最后我們進行比較,所以這時候我們最好的方法是提取它的行號,如下:

Shell編程之if語句的示例分析

也就是說 使用wc -l這個命令可以知道它的行號,只有一行 所以顯示1,那么我們來關閉Nginx再次查看

Shell編程之if語句的示例分析

當我們關閉Nginx時 它已經沒有80端口以及Nginx服務名的一些信息了,所以顯示0 那么我們現在又能得出一個結論,如果 netstat -anput | grep nginx | wc -l 輸出的為1 那么Nginx是啟動的 輸出的為0 那么Nginx已經停止運行;

到這里我們的兩個信息已經知道了:如何查看Nginx服務是否啟動?  我們如何查看Nginx服務宕機時候的一些情況。

那么就接下來就剩下郵件告警了,我們可以使用sendmail來實現,安裝如下:

1.安裝相關的依賴包

[root@shell-yankerp sh]# yum install perl-Net-SSLeay perl-IO-Socket-SSL -y

2.解壓并安裝

[root@shell-yankerp ~]# tar zxf sendEmail-v1.56.tar.gz 
[root@shell-yankerp ~]# cd sendEmail-v1.56/ 
[root@shell-yankerp sendEmail-v1.56]# cp sendEmail /usr/local/bin/sendEmail

到這里我們先發個郵件試試,確保郵件可以發送

代碼如下:


[root@shell-yankerp ~]# /usr/local/bin/sendEmail -f yankerpcs@163.com -t ywyankerp@163.com -s smtp.163.com -u "Nginx測試" -o message-content-type=html -o message-charset=utf8 -xu yankerpcs -xp ******* -m "Nginx正在測試" 

Shell編程之if語句的示例分析

這邊我已經收到了郵件報警測試的郵件了

3、接下來就可以開始寫腳本了如下:

#!/bin/bash 
# Maintenance:<ywyankerp@163.com> 
# BINLOG:www.ywyankai.cn 
# DATE:03:31:35 CST, Sunday, 02 month, 2018, 04 
# Test scripts 
 
NX=`netstat -anput | grep nginx | wc -l` 
 
if [ "$NX" -eq 0 ] 
 then 
  /usr/local/nginx/sbin/nginx 
fi 
 
if [ "$?" -ne 0 ] 
 then /usr/local/bin/sendEmail -f yankerpcs@163.com -t ywyankerp@163.com -s smtp.163.com -u "Nginx報警" -o message-content-type=html -o message-charset=utf8 -xu yankerpcs -xp ******* -m "Nginx啟動失敗盡快查 
看!!!" &> /dev/null 
fi

在這里我會一條條的解釋:

NX=`netstat -anput | grep nginx | wc -l`  :這就是上面測試的那條命令,如果Nginx宕機就輸出0 正常運行那么就輸出1 來確定Nginx運行狀況賦值給了變量NX

if [ "$NX" -eq 0 ]     //如果NX執行的結果為0 
 then          //那么
  /usr/local/nginx/sbin/nginx  //啟動nginx服務
fi

最后結束符fi

if [ "$?" -ne 0 ]
 then /usr/local/bin/sendEmail -f yankerpcs@163.com -t ywyankerp@163.com -s smtp.163.com -u "Nginx報警" -o message-content-type=html -o message-charset=utf8 -xu yankerpcs -xp ****** -m "Nginx啟動失敗盡快查
看!!!" &> /dev/null
fi

當我們啟動Nginx啟動失敗時 我們在這里使用特殊的狀態變量$? 查看上一條命令是否為0 是0就是成功。解釋:如果啟動Nginx失敗,那么就會執行 /usr/local/bin.....就是這個郵箱報警程序 輸出一條 Nginx啟動失敗盡快查看!!!

最后的腳本是這樣的 如下:

Shell編程之if語句的示例分析

那么接下來我們執行:

1.首先我們模擬Nginx宕機,隨后運行腳本

Shell編程之if語句的示例分析

在第一條命令我們可以看到nginx沒有啟動 當我們運行腳本它檢測到了Nginx宕機后就會執行啟動操作是以下語句實現的如下:

NX=`netstat -anput | grep nginx | wc -l` 
 
if [ "$NX" -eq 0 ] 
 then 
  /usr/local/nginx/sbin/nginx 
fi

2、我們嘗試修改Nginx的啟動路徑,故意出現Nginx啟動失敗的情節,來測試郵箱是否能夠正常接收

Shell編程之if語句的示例分析

修改完成后運行此腳本

Shell編程之if語句的示例分析

實現此效果的腳本段如下:

if [ "$?" -ne 0 ] 
 then /usr/local/bin/sendEmail -f yankerpcs@163.com -t ywyankerp@163.com -s smtp.163.com -u "Nginx報>警" -o message-content-type=html -o message-charset=utf8 -xu yankerpcs -xp ****** -m "Nginx啟動失敗盡>快查看!!!" &> /dev/null 
fi

隨后我們添加計劃任務 每1分鐘執行一次腳本

Shell編程之if語句的示例分析

其實到這里我們的一個實例就結束了,雖然這表面上是一個實例,但是MySQL PHP? SSHD這些各種服務的檢測腳本那么肯定是沒有任何的問題了,包括檢測磁盤空間的占用情況等等,都是可以舉一反三的,在這里我就不在演示了。 

感謝各位的閱讀!關于“Shell編程之if語句的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

余干县| 会东县| 天柱县| 新巴尔虎左旗| 精河县| 陆良县| 广南县| 东山县| 云南省| 桐庐县| 灌阳县| 集安市| 绍兴县| 石渠县| 财经| 青冈县| 厦门市| 应城市| 宣汉县| 大足县| 改则县| 思茅市| 旬邑县| 德令哈市| 前郭尔| 巴塘县| 新乡县| 霞浦县| 灌南县| 靖边县| 罗定市| 调兵山市| 左贡县| 十堰市| 河津市| 塔城市| 浮梁县| 乐东| 五大连池市| 马关县| 巴马|