shell編程腳本語法
學習了兩個月的Linux,記住了很多命令,知道了腳本的作用,也被腳本殺死了大概一半的腦細胞,現在腳本還不能熟練運用,感覺虧了。心疼我的腦細胞,痛恨腳本,但不得不說,腳本是一個好東西啊,用起來真的方便,但是寫起來真的燒腦袋呦!下面來總結一下這周學習的腳本語法,哇,語法雖然不多也不難,但是結合起來熟練運用還有一定的難度,何況現在的腳本才幾行,以後要寫幾行,心裏沒點數嗎!廢話少說,開始
跳過最基礎的命令行堆積的腳本,總結一下讓腳本更簡潔實用的語法
首先,條件選擇if語句登場
if語句用法:常見的單分支,雙分支,多分支。
實際中能不能用到單分支語句不能心裏沒點數嗎,直接多分支,會了多分支,單雙分支自然就會了
if 判斷條件1; then
條件為真的命令代碼
elif 判斷條件2;then
條件為真的命令代碼
elif 判斷條件3;then
條件為真的命令代碼
else
以上條件都為假的命令代碼
舉個例子:
完畢
條件判斷:case語句
case $1 in
條件1)
分支3
;;
條件2)
分支2
;;
……
*)
默認分支
;;
esac
case支持glob風格的通配符:
*: 任意長度任意字符 【比如搜索文件的話 K*)匹配所有K開頭的文件名】
?: 任意單個字符
[]:指定範圍內的任意單個字符
a|b: a或b
舉個例子:
循環語句 for while until shift select
作用如其名,將某代碼段重復運行多次
for循環用法
for 變量名 in 列表;do
循環體
done
執行機制:依次將列表中的元素賦值給“變量名”; 每次賦值後即執行一次循環體; 直到列表中的元素耗盡,循環結束
【一般套路:變量名一般是上面定義過的變量,這裏用來引用 如:$i 或者是位置變量 如:$1,$2
列表一般都是通過調用命令結果來生成的 如 `seq 1 10` $(ls /etc) 】
for循環還有一個特殊格式:和C語言類似
for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式))
(( i=0; i<=100; i++ ))
do
循環體
done
舉兩個例子:(一個普通for循環,一個for循環特殊格式)
while循環語句:
用法:
while CONDITION;do
循環體
done
CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之後會再次做判斷;條件為“true”,則執行一次循環;直到條件測試狀態為“false”終止循環 因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正
這裏可以創建無限循環
while true;do
循環體
done
for循環有特殊格式,while也有
while循環的特殊用法(遍歷文件的每一行):
while read line; do
循環體
done < /PATH/FROM/SOMEFILE
依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line
用法介紹完畢,來舉例:
select循環語句
用法:
select 變量名 in 列表 與for語句類似,套路也一樣。
do
循環體命令
done
select 循環主要用於創建菜單,按數字順序排列的菜單項將顯示在標準錯誤上,並顯示 PS3 提示符,
等待用戶輸入,用戶輸入被保存在內置變量 REPLY 中
select 經常和 case 聯合使用 生成菜單列表。[不是吃飯的菜單!!]
select 是個無限循環,因此要記住用 break 命令退出循環,或用 exit 命令終止腳本。也可以按 ctrl+c 退出循環
舉例舉例:循環控制shift命令;
用於將參量列表 list 左移指定次數,缺省為左移一次。
當用到while語句,並且while 循環遍歷位置參量列表時,常用到 shift
舉例:
執行結果:(相信一看你就什麽都懂了)
跳出單次循環continu語句:
continue [N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層
來吧 舉個例子吧:
跳出整個循環break語句:
break [N]:提前結束第N層循環,最內層為第1層【註意是結束第N層循環,不是本次循環】
再舉例:
到這裏shell編程腳本的基礎語句差不多介紹完了,之後還可以在腳本裏調用函數,數組。這樣,腳本的使用和編寫就可以更加的簡單明了,下次博客再介紹函數的定義和調用,數組的定義和調用吧,我要去寫腳本了,bye~~
shell編程腳本語法