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

理論部分:shell

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

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

例如:批量安裝軟件包ide

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

二、shell環境根據$?來判斷是否執行成功,當返回值爲0時表明執行成功。若是是非0則表明執行異常通常爲1或者爲1到127之間的整數。spa

三、經常使用的邏輯測試3d

&&:邏輯與,「而且並且」的意思 知足兩個條件日誌

||:邏輯或,「或者」的意思 知足兩個條件中的一個blog

! : 邏輯否 ip


邏輯與&&是指而且並且的意思,只有先後兩個條件都成立時纔會返回值爲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

實戰部分

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

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

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

clip_image032

vim httpd.sh

clip_image034

clip_image036

查看 /var/log/httpderr.log

clip_image038

二、編寫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循環語句的應用

相關文章
相關標籤/搜索