理論部分:shell
一、在簡單的腳本中各條語句按順序執行,從而實現自動化的管理,vim
順序單一執行太過機械化,不夠「智能」,難以實現更加靈活的系統任務。服務器
例如:批量安裝軟件包ide
100臺機器 50臺已安裝 50臺未安裝測試
二、shell環境根據$?來判斷是否執行成功,當返回值爲0時表明執行成功。若是是非0則表明執行異常通常爲1或者爲1到127之間的整數。spa
三、經常使用的邏輯測試3d
&&:邏輯與,「而且並且」的意思 知足兩個條件日誌
||:邏輯或,「或者」的意思 知足兩個條件中的一個blog
! : 邏輯否 ip
邏輯與&&是指而且並且的意思,只有先後兩個條件都成立時纔會返回值爲0(成立)不然就是非0(不成立)
邏輯與-實例
先進入到/usr目錄在顯示當前所在目錄,若是cd沒有進入目錄後面的命令是不會執行的
邏輯或-實例
實戰—1
咱們經過邏輯表達判斷一下兩個變量的值
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變量是定義當前系統的語言屬於環境變量
取反就是不等於的意思
實戰2—
-z爲對於爲賦值的變量進行測試
2-1-單分支if語句的格式
if 條件測試操做
then
命令序列
fi
單分支的結構很是簡單,條件成立就執行then命令序列,條件不成立則fi結束
實戰—1
2-2-雙分支IF語句
雙分支的選擇結果,要求針對條件成立,條件不成立兩種狀況分別執行不一樣的操做
語法結構
if 條件測試操做
then(條件成立執行)
命令序列1
else(不然,條件不成立,則執行)
命令序列2
fi
實戰1—
咱們編寫一個連通性測試腳本經過位置參數$1提供目標主機地址,而後根據ping檢測結果給出相應提示
-c ping包的次數
-i ping包的間隔
-w 超時的時間間隔
腳本解釋:若是if判斷爲0則接下來執行then輸出目標主機up
若是不爲0則執行else輸出目標主機down
2-3-多分支if語句
因爲if語句能夠根據測試結果的成立,
不成立分別執行,因此能夠嵌套使用,進行屢次判斷.
if 條件測試操做1
then
命令序列1
elif 條件測試2
then
命令序列2
else
命令序列3
fi
多分支if語句應用
1. 編寫一個成績分檔腳本gradediv.sh根據輸入不一樣的分數來區分優秀、合格、不合格三擋
vim gradediv.sh
首先判斷是否大於85 小於 100 若是符合則輸出優秀並結束判斷
若是小於85 而且大於 60 爲優秀 執行then 輸出合格
不然 都執行else 其他的都是不合格繼續
執行的結果
實戰部分
一、編寫腳本程序用於監視系統服務httpd的運行狀態,要求以下
當服務狀態失敗時在"/var/log/httpderr.log"文件中記入日誌信息。
自動將狀態失敗的httpd服務從新啓動。若重啓httpd服務失敗,測嘗試從新啓動服務器主機
vim httpd.sh
查看 /var/log/httpderr.log
二、編寫uname.sh腳本判斷當前系統的內核主次版本若大於2.4則輸出當前版本不然輸出提示當前版本過低
過濾主版本號
過濾出次版本號
vim kernel.sh
執行:
3-1-for循環語句的結構
使用for循環語句時,須要指定一個變量及可能的取值列表。跟對不一樣的取值,執行相同的命令序列直到變量的值取完遍退出循環。取值列表稱爲for語句的執行條件
for語句執行的語法結構
for 變量名 in 取值列表
do
命令序列
done
其種 變量名能夠自定義,do裏面還能夠嵌套多個if語句done結束循環
in乃是關鍵字,從哪裏取值,多個取值之間使用空格隔開
實驗環境:有些時候咱們的系統須要多個用戶的時候,而且用戶名使用員工的拼音爲用戶名這是也可使用for循環進行建立並設置初始密碼
咱們先從人事部取來員工的姓名列表將這個列定義爲取值列表
咱們這裏模擬建立一個
這些用戶就做爲取值,都是一些廠家的名字.
vim users.txt
查看建立成功的用戶
編輯一個腳本 添加用戶vim adduser.sh
首先定義一個變量做爲取值列表
將取值列表賦予變量user
嵌套一個if語句判斷用戶是否存在,若是存在則輸出用戶已存在,不然執行else的命令序列進行添加用戶而且設置密碼實現取值循環
if判斷使用grep 和awk 過濾出/etc/passwd的第一個字段
使用user_a與取值列表進行比較若是等於則輸出用戶已存在,若是不等於則執行else的命令序列
執行腳本:sh –x adduser.sh
再次執行
輸出了用戶已存在,
若要刪除剛剛建立的用戶能夠編寫腳本
vim deluser.sh
執行:
好了這就是批量建立用戶和批量刪除用戶
案例根據ip地址列表檢測主機狀態
創建一個ip地址取值列表
vim ip.txt
vim ping.sh
判斷一下當前主機是否存活,若是存活 輸出 host is up 不然輸出 host is down
這就是簡單的for循環語句的應用