shell腳本進階篇(上)
流程控制
過程式編程語言: 順序執行 選擇執行 循環執行
條件選擇if語句
? 單分支
if 判斷條件;then 條件為真的分支代碼 fi
雙分支 if 判斷條件; then 條件為真的分支代碼 else 條件為假的分支代碼 fi
多分支 if 判斷條件1; then 條件為真的分支代碼 elif 判斷條件2; then 條件為真的分支代碼 elif 判斷條件3; then 條件為真的分支代碼 else 以上條件都為假的分支代碼 fi
逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而後結束整個if語句
舉例:
編寫腳本/root/bin/filetype.sh,判斷用戶輸入文件路徑,顯示其文件類型(普通,目錄,鏈接,其它文件類型)
執行結果如下
舉例2
編寫腳本/root/bin/checkint.sh,判斷用戶輸入的參數是否為正整數
執行結果如下
條件判斷:case語句
case 變量引用 in
PAT1) 分支1 ;;
PAT2) 分支2 ;;
... *) 默認分支 ;;
esac case支持glob風格的通配符: *: 任意長度任意字符 ?: 任意單個字符 []:指定範圍內的任意單個字符 a|b: a或b
舉例
創建一個腳本名為useradd.sh, 當執行-a選項時,會批量創建用戶mageuser1~mageuser20,要求mageuserX的uid為200x,mageuserxx的uid為20xx,1~8用戶的shell為/sbin/nologin,9~20用戶的uid為/bin/bash。最後這20個用戶的密碼都設置為centos 當執行-d選項時,批量刪除用戶mageuser1~mageuser20。連同家目錄一同刪除
循環
循環執行 將某代碼段重復運行多次 重復運行多少次: 循環次數事先已知 循環次數事先未知 有進入條件和退出條件
for循環
for 變量名 in 列表;do
循環體
done
舉例
舉例
編寫腳本打印矩形
執行結果如下:
while循環
? while CONDITION; do
循環體
done
? CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之後會再次做判斷;條件 為“true”,則執行一次循環;直到條件測試狀態為“false”終止循環
? 因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正
? 進入條件:CONDITION為true
? 退出條件:CONDITION為false
舉例
循環控制shift命令
? shift [n]
? 用於將參量列表 list 左移指定次數,缺省為左移一次。
? 參量列表 list 一旦被移動,最左端的那個參數就從列表中刪除。while 循環 遍歷位置參量列表時,常用到 shift
? ./doit.sh a b c d e f g h
? ./shfit.sh a b c d e f g h
舉例
執行結果如下
創建無限循環
? while true; do
循環體
? done
? until false; do
循環體
? Done
(shell 腳本進階篇下一周後更新)
shell腳本進階篇(上)