shell腳本(二)--if流程控制語句和for循環語句的使用

理論部分:

1、在簡單的腳本中各條語句按順序執行,從而實現自動化的管理,

順序單一執行太過機械化,不夠“智能”,難以實現更加靈活的系統任務。

例如:批量安裝軟件包

100臺機器 50臺已安裝 50臺未安裝

2、shell環境根據$?來判斷是否執行成功,當返回值爲0時代表執行成功。如果是非0則代表執行異常一般爲1或者爲1到127之間的整數。

3、常用的邏輯測試

&&:邏輯與,“並且而且”的意思 滿足兩個條件

||:邏輯或,“或者”的意思 滿足兩個條件中的一個

! : 邏輯否


邏輯與&&是指並且而且的意思,只有前後兩個條件都成立時纔會返回值爲0(成立)否則就是非0(不成立)

邏輯與-實例

clip_image002

先進入到/usr目錄在顯示當前所在目錄,如果cd沒有進入目錄後面的命令是不會執行的

clip_image004

邏輯或-實例

clip_image006

實戰—1

我們通過邏輯表達判斷一下兩個變量的值

clip_image007

clip_image009

2、數值的比較

-eq:等於(Equal)

-ne:不等於(Not Equal)

-gt:大於(Greater Than)

-lt:小於(Lesser Than)  

-le:小於或等於(Lesser or Equal)

-ge:大於或等於(Greater or Equal)

格式 [ 數值1 操作符 數值2 ]

3.字符串比較

= 字符串內容相同

!= 字符串內容不同

-z 字符串內容爲空

! 取反的意思.

實戰1--

若要判斷當前系統的語言環境,當發現不是en.US時輸出提示信息“$LANG”

$LANG變量是定義當前系統的語言屬於環境變量

取反就是不等於的意思

clip_image011

實戰2—

-z爲對於爲賦值的變量進行測試

clip_image013


2-1-單分支if語句的格式

if 條件測試操作

then

命令序列

fi

clip_image015

單分支的結構非常簡單,條件成立就執行then命令序列,條件不成立則fi結束

實戰—1

clip_image016

clip_image018

2-2-雙分支IF語句

雙分支的選擇結果,要求針對條件成立,條件不成立兩種情況分別執行不同的操作

語法結構

if 條件測試操作

then(條件成立執行)

命令序列1

else(否則,條件不成立,則執行)

命令序列2

fi

clip_image020



實戰1—


我們編寫一個連通性測試腳本通過位置參數$1提供目標主機地址,然後根據ping檢測結果給出相應提示

clip_image022

-c ping包的次數

-i ping包的間隔

-w 超時的時間間隔

腳本解釋:如果if判斷爲0則接下來執行then輸出目標主機up

如果不爲0則執行else輸出目標主機down

clip_image024


2-3-多分支if語句

由於if語句可以根據測試結果的成立,

不成立分別執行,所以可以嵌套使用,進行多次判斷.

if 條件測試操作1

then

命令序列1

elif 條件測試2

then

命令序列2

else

命令序列3

fi



clip_image026

多分支if語句應用

1. 編寫一個成績分檔腳本gradediv.sh根據輸入不同的分數來區分優秀、合格、不合格三擋

vim gradediv.sh

clip_image028

首先判斷是否大於85 小於 100 如果符合則輸出優秀並結束判斷

如果小於85 並且大於 60 爲優秀 執行then 輸出合格

否則 都執行else 其餘的都是不合格繼續

執行的結果

clip_image030

實戰部分

1、編寫腳本程序用於監視系統服務httpd的運行狀態,要求如下

當服務狀態失敗時在"/var/log/httpderr.log"文件中記入日誌信息。

自動將狀態失敗的httpd服務重新啓動。若重啓httpd服務失敗,測嘗試重新啓動服務器主機

clip_image032

vim httpd.sh

clip_image034

clip_image036

查看 /var/log/httpderr.log

clip_image038

2、編寫uname.sh腳本判斷當前系統的內核主次版本若大於2.4則輸出當前版本否則輸出提示當前版本太低

過濾主版本號

clip_image040

過濾出次版本號

clip_image042

vim kernel.sh

clip_image044

執行:

clip_image046

3-1-for循環語句的結構

使用for循環語句時,需要指定一個變量及可能的取值列表。跟對不同的取值,執行相同的命令序列直到變量的值取完遍退出循環。取值列表稱爲for語句的執行條件

for語句執行的語法結構

for 變量名 in 取值列表

do

命令序列

done

其種 變量名可以自定義,do裏面還可以嵌套多個if語句done結束循環

in乃是關鍵字,從哪裏取值,多個取值之間使用空格隔開

clip_image048

實驗環境:有些時候我們的系統需要多個用戶的時候,並且用戶名使用員工的拼音爲用戶名這是也可以使用for循環進行創建並設置初始密碼

我們先從人事部取來員工的姓名列表將這個列定義爲取值列表

我們這裏模擬創建一個

這些用戶就作爲取值,都是一些廠家的名字.

vim users.txt

clip_image049

clip_image050

查看創建成功的用戶

clip_image052

編輯一個腳本 添加用戶vim adduser.sh

首先定義一個變量作爲取值列表

將取值列表賦予變量user

嵌套一個if語句判斷用戶是否存在,如果存在則輸出用戶已存在,否則執行else的命令序列進行添加用戶並且設置密碼實現取值循環

if判斷使用grep awk 過濾出/etc/passwd的第一個字段

使用user_a與取值列表進行比較如果等於則輸出用戶已存在,如果不等於則執行else的命令序列


clip_image053

執行腳本:sh –x adduser.sh

clip_image054

再次執行

clip_image055

輸出了用戶已存在,

若要刪除剛剛創建的用戶可以編寫腳本

vim deluser.sh

clip_image057

執行:

clip_image058

好了這就是批量創建用戶和批量刪除用戶

案例根據ip地址列表檢測主機狀態

建立一個ip地址取值列表

vim ip.txt

clip_image059

vim ping.sh

clip_image061

判斷一下當前主機是否存活,如果存活 輸出 host is up 否則輸出 host is down

clip_image063

這就是簡單的for循環語句的應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章