最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Shell編程之if語句實(shí)戰(zhàn)(小結(jié))

 更新時(shí)間:2018年02月07日 11:58:46   作者:789-yankerp  
本篇文章主要介紹了詳解Shell編程之if語句實(shí)戰(zhàn)(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

對于if語句,其實(shí)很多人都肯定的聽說過,那么if語句到底是什么,簡單的說,就類似于漢語里面的如果----那么,if語句是linux運(yùn)維人員在實(shí)際環(huán)境中使用的最頻繁也是最重要的語句?。?!

一、if條件語句

1、單分支語句結(jié)構(gòu)

第一種語法如下:

if <條件表達(dá)式> 
 then 
 指令 
fi 

第二種語法

if <條件表達(dá)式>; then 
 指令 
fi 

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

其實(shí)很簡單,舉個(gè)例子如下:

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

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

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

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

2、以上就是單分支的if語句,接下來看看雙分支的if語法結(jié)構(gòu)

if <條件表達(dá)式> 
 then 
 指令一 
 else 
 指令二 
fi 

以上就是單分支的if語句結(jié)構(gòu),那么在舉個(gè)例子如下:

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

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

到這里我們在來一個(gè)形象描述

如果 <你不會if語句> 
 那么 
  就快點(diǎn)學(xué),快點(diǎn)練 
 否則 
  你永遠(yuǎn)都不可能學(xué)會 
果如 

我們發(fā)現(xiàn) 單分支和雙分支的區(qū)別就在于一個(gè)有else 一個(gè)沒有。

3、多分支if語句結(jié)構(gòu)

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

if 語句多分支結(jié)構(gòu)主體為:如果.....那么....否則如果.....那么.....否則如果.....那么,,,,

例1:

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

解釋如下圖:


看完圖還是沒理解? 沒有關(guān)系 如下:


到這里應(yīng)該是沒有問題了~~

單分支if條件語句實(shí)踐

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

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

修改如下:

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

運(yùn)行結(jié)果如下:

[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的一些基本語法應(yīng)該掌握了,那么我們接下來,來點(diǎn)實(shí)際的。

實(shí)戰(zhàn)1:開發(fā)shell腳本檢測Nginx服務(wù)是否正常啟動 如果宕機(jī),那么就設(shè)置郵箱報(bào)警?。?!

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

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

那么我們可以根據(jù)以上的需求分為三塊 如:如何查看Nginx服務(wù)是否啟動?  我們?nèi)绾尾榭碞ginx服務(wù)宕機(jī)時(shí)候的一些情況。 最后我們需要知道我們用什么樣的工具來實(shí)現(xiàn)這個(gè)郵箱報(bào)警。

1、如何查看Nginx啟動?

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


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


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


當(dāng)我們關(guān)閉Nginx時(shí) 它已經(jīng)沒有80端口以及Nginx服務(wù)名的一些信息了,所以顯示0 那么我們現(xiàn)在又能得出一個(gè)結(jié)論,如果 netstat -anput | grep nginx | wc -l 輸出的為1 那么Nginx是啟動的 輸出的為0 那么Nginx已經(jīng)停止運(yùn)行;

到這里我們的兩個(gè)信息已經(jīng)知道了:如何查看Nginx服務(wù)是否啟動?  我們?nèi)绾尾榭碞ginx服務(wù)宕機(jī)時(shí)候的一些情況。

那么就接下來就剩下郵件告警了,我們可以使用sendmail來實(shí)現(xiàn),安裝如下:

1.安裝相關(guān)的依賴包

[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 

到這里我們先發(fā)個(gè)郵件試試,確保郵件可以發(fā)送

復(fù)制代碼 代碼如下:

[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正在測試" 

這邊我已經(jīng)收到了郵件報(bào)警測試的郵件了

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報(bào)警" -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宕機(jī)就輸出0 正常運(yùn)行那么就輸出1 來確定Nginx運(yùn)行狀況賦值給了變量NX

if [ "$NX" -eq 0 ]     //如果NX執(zhí)行的結(jié)果為0 
 then          //那么
  /usr/local/nginx/sbin/nginx  //啟動nginx服務(wù)
fi

最后結(jié)束符fi

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

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

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


那么接下來我們執(zhí)行:

1.首先我們模擬Nginx宕機(jī),隨后運(yùn)行腳本


在第一條命令我們可以看到nginx沒有啟動 當(dāng)我們運(yùn)行腳本它檢測到了Nginx宕機(jī)后就會執(zhí)行啟動操作是以下語句實(shí)現(xiàn)的如下:

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

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


修改完成后運(yùn)行此腳本


實(shí)現(xiàn)此效果的腳本段如下:

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

隨后我們添加計(jì)劃任務(wù) 每1分鐘執(zhí)行一次腳本


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

本次就到這里,希望對您有所幫助,再見!小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

相關(guān)文章

  • Linux中的service命令與systemctl命令有何區(qū)別

    Linux中的service命令與systemctl命令有何區(qū)別

    在Linux中,service?和?systemctl?是兩個(gè)至關(guān)重要且極其相似的命令,它們?nèi)绱讼嗨?,以至于人們很容易想知道它們之間有何不同,是否可以互換使用,下面我們就來看看之前的區(qū)別到底有哪些吧
    2023-08-08
  • Vim命令合集

    Vim命令合集

    這篇文章主要介紹了Vim命令合集的相關(guān)知識,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-10-10
  • 深入理解Shell輸出顏色與控制

    深入理解Shell輸出顏色與控制

    在Linux shell或者平時(shí)echo輸出時(shí)有時(shí)為了區(qū)分某些字符串的重要性,往往對其輸出內(nèi)容添加顏色以醒目區(qū)分。下面這篇文章就主要介紹了關(guān)于Shell輸出顏色與控制,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • shell通過遍歷輸出兩個(gè)日期范圍內(nèi)所有日期的方法

    shell通過遍歷輸出兩個(gè)日期范圍內(nèi)所有日期的方法

    這篇文章主要介紹了在shell通過遍歷輸出兩個(gè)日期范圍內(nèi)所有日期的方法,文中給出了詳細(xì)的示例代碼以及實(shí)現(xiàn)思路流程,對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • 在Linux中自動化腳本執(zhí)行重復(fù)性任務(wù)的詳細(xì)步驟

    在Linux中自動化腳本執(zhí)行重復(fù)性任務(wù)的詳細(xì)步驟

    選擇適合你需求的腳本語言,對于大多數(shù)自動化任務(wù),Bash腳本是一個(gè)不錯(cuò)的選擇,因?yàn)樗子诰帉懞屠斫?對于更復(fù)雜的任務(wù),你可能需要使用Python或其他編程語言,下面給大家分享在Linux中編寫自動化腳本執(zhí)行重復(fù)性任務(wù)通常涉及的步驟,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • 大小寫字母轉(zhuǎn)換的shell腳本代碼

    大小寫字母轉(zhuǎn)換的shell腳本代碼

    本文介紹下,用于大小寫字母轉(zhuǎn)換的一例shell腳本,學(xué)習(xí)tr、awk、sed等命令的用法。有需要的朋友參考下
    2013-08-08
  • shell腳本配置hostname的方法步驟

    shell腳本配置hostname的方法步驟

    本文主要介紹了shell腳本配置hostname的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • shell腳本讀取命令行參數(shù)的實(shí)現(xiàn)

    shell腳本讀取命令行參數(shù)的實(shí)現(xiàn)

    本文主要介紹了shell腳本讀取命令行參數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Shell腳本去重的幾種方法實(shí)例

    Shell腳本去重的幾種方法實(shí)例

    這篇文章主要介紹了Shell腳本去重的幾種方法實(shí)例,本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-07-07
  • fedora 開機(jī)啟動/禁止開機(jī)啟動服務(wù)的實(shí)現(xiàn)

    fedora 開機(jī)啟動/禁止開機(jī)啟動服務(wù)的實(shí)現(xiàn)

    下面小編就為大家?guī)硪黄猣edora 開機(jī)啟動/禁止開機(jī)啟動服務(wù)的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論

余庆县| 彰武县| 新竹市| 水富县| 绥化市| 安远县| 丰顺县| 镇远县| 吐鲁番市| 恩平市| 始兴县| 德清县| 余江县| 山阴县| 彭水| 乌鲁木齐市| 黄石市| 桂东县| 临城县| 澄城县| 焦作市| 化隆| 咸丰县| 吕梁市| 东源县| 温宿县| 睢宁县| 色达县| 东丽区| 济宁市| 会泽县| 元江| 喀喇沁旗| 来宾市| 临沧市| 杭锦旗| 绥棱县| 长宁区| 邵武市| 瑞金市| 三门县|