Shell_06_判斷和循環
- 判斷
-
- if
- case
- 循環
-
- 循環類别
-
- for do done
- while do done
- until do done
- 控制循環
-
- 嵌套循環
- 跳出循環
判斷
if
條件判斷語句:根據條件進行判斷并執行對應的指令
指令格式:
if [ 條件1 ];then
程式段1
elif [ 條件2 ];then
程式段2
else
程式段3
fi
1)if和fi總是成對出現(代表判斷語句的開始和結束);
2)判斷語句可嵌套使用;
3)當一個判斷語句含有多個相同層級if或elif時,則隻有第一個條件傳回的狀态碼為0的語句會被執行(若層級不相同,則可運作多個)
1)條件成立,運作then後跟的程式段(反之,運作else後跟的程式段)
//根據條件傳回的狀态碼判斷是否成立(0為成立,其他均為失敗)
2)條件左右兩邊必須加空格,否則無法識别條件;
3)也可執行指定指令作為條件,但運作結果會顯示在終端
如:通過條件判斷語句,判斷目前使用者的家目錄和指定檔案是否存在
1)編寫test5.sh腳本檔案
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL4QTOzEmMkZTOyITNmVDO5kTN3QzY2ETYyQjM5YGMzQzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2)調用test5.sh腳本檔案
如:通過條件判斷語句,檢查擁有家目錄卻不存在的使用者和沒有家目錄的使用者
1)編寫test6.sh腳本檔案
2)調用test6.sh腳本檔案
case
内容判斷語句:根據變量内容進行判斷并執行對應的指令
指令格式:
case ${變量名} in
“變量内容1”)
程式段1
;;
“變量内容2”)
程式段2
;;
“變量内容N”)
程式段N
;;
*)
;;
esac
1)每個變量内容的程式段都需用兩個分号“;;”代表程式段落的結束;
2)case和esac總是成對出現(代表内容判斷的開始和結束);
3)變量可為:定義變量、輸入變量、内置變量、接受變量;
4)若變量内容含有多個内容時,内容之間使用“|”分隔;
如:設定hello3.sh腳本檔案僅在輸入hello時才回應
1)編寫hello3.sh腳本檔案
2)調用hello3.sh腳本檔案
如:通過内容判斷語句,屬于不同的内容顯示不同的回應
1)編寫test26.sh腳本檔案
2)調用test26.sh腳本檔案
循環
循環類别
for do done
for循環:循環指定次數
指令格式1:
for 形式變量 in 内容1 内容2 内容N
do
程式段
done
1)内容1~N會依次帶入形式變量;
2)内容1~N可用數組變量或變量形式代替;
3)當内容中含有單引号或空格時,需使用雙引号括起來
//也可通過修改IFS變量,修改字段分隔符
4)當循環結束後,形式變量預設儲存最後一個帶入的内容;
5)在done後添加輸出重定向,可将循環結果導入到指定檔案中;
如:通過for循環實作變量不同内容的輸出
1)編寫test3.sh腳本檔案;
2)調用test3.sh腳本檔案
如:建立dir_perm.sh檔案實作判斷目錄下所有檔案的權限
1)編寫dir_perm.sh腳本檔案;
2)調用dir_perm.sh腳本檔案
内部字段分隔符(Internal Field Separator):Shell中用于分隔每個字段的字元
1)内部字元分隔符的變量位:IFS
2)預設值為:空格
3)指派格式:IFS=字元
//若有多個字元作為分隔符,可在指派時連寫在一起
如:将換行符、冒号、分号和雙引号作為分隔符的格式為:IFS=$‘\n’:;”
如:通過IFS變量實作for循環中的多個換行輸入
1)編寫test7.sh腳本檔案
2)調用test7.sh腳本檔案
指令格式2:
for (( 初始值;循環條件;指派運算 ))
do
程式段
done
1)格式類似于C語言的for循環,且可調用變量;
2)初始值和指派運算可有多個,但循環條件僅能有一個;
如:建立sum1_input.sh檔案,計算1加到輸入數的和
1)編寫sum1_input.sh腳本檔案
2)調用sum1_input.sh腳本檔案
如:在for循環中定義多個初始值和指派運算
1)編寫test8.sh腳本檔案
2)調用test8.sh腳本檔案
while do done
while循環:直到條件不成立才退出循環
指令格式:
while [ 判斷條件 ]
do
程式段
done
(1)若指定多個判斷條件時
1)隻根據最後一個判斷條件的傳回的狀态碼判斷是否繼續循環;
2)每個判斷條件需單獨占據一行;
3)多個判斷條件會依次執行;
(2)在done後添加輸出重定向,可将循環結果導入到指定檔案中;
如:通過while循環輸出數值
1)編寫test9.sh腳本檔案
2)調用test9.sh腳本檔案
until do done
until循環:直到條件成立才退出循環
指令格式:
until [ 判斷條件 ]
do
程式段
done
(1)若指定多個判斷條件時
1)隻根據最後一個判斷條件的傳回的狀态碼判斷是否繼續循環;
2)每個判斷條件需單獨占據一行;
3)多個判斷條件會依次執行;
(2)在done後添加輸出重定向,可将循環結果導入到指定檔案中;
控制循環
嵌套循環
嵌套循環(Nested Loop):循環的程式段内可調用任意類型的指令(包含循環)
如:建立choice_what.sh從數組中随機輸出三個數,且不能重複
1)編寫choice_what.sh腳本檔案
2)調用choice_what.sh腳本檔案
如:通過内部循環實作/etc/passwd檔案的格式化輸出
1)編寫test10.sh腳本檔案;
2)調用test10.sh腳本檔案
跳出循環
跳出循環分為:break指令、continue指令
(1)break指令:跳出目前正在執行循環,并結束循環
1)指令格式:break N
//N指定跳出的循環層級(若沒有,則預設為1)
如:通過break指令,跳出for循環
1)編寫test11.sh腳本檔案
2)調用test11.sh腳本檔案
(2)continue指令:跳出本次循環,開始下一次循環
1)指令格式:continue N
//N指定跳出的循環層級(若沒有,則預設為1)
如:通過continue跳出循環
1)編寫test12.sh腳本檔案
2)調用test12.sh腳本檔案