天天看點

Shell_06_判斷和循環判斷循環

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腳本檔案

Shell_06_判斷和循環判斷循環

2)調用test5.sh腳本檔案

Shell_06_判斷和循環判斷循環

如:通過條件判斷語句,檢查擁有家目錄卻不存在的使用者和沒有家目錄的使用者

1)編寫test6.sh腳本檔案

Shell_06_判斷和循環判斷循環

2)調用test6.sh腳本檔案

Shell_06_判斷和循環判斷循環

case

内容判斷語句:根據變量内容進行判斷并執行對應的指令

指令格式:

case ${變量名} in

“變量内容1”)

程式段1
;;
“變量内容2”)
程式段2
;;
“變量内容N”)
程式段N
;;
*)
;;
esac
           

1)每個變量内容的程式段都需用兩個分号“;;”代表程式段落的結束;

2)case和esac總是成對出現(代表内容判斷的開始和結束);

3)變量可為:定義變量、輸入變量、内置變量、接受變量;

4)若變量内容含有多個内容時,内容之間使用“|”分隔;

如:設定hello3.sh腳本檔案僅在輸入hello時才回應

1)編寫hello3.sh腳本檔案

Shell_06_判斷和循環判斷循環

2)調用hello3.sh腳本檔案

Shell_06_判斷和循環判斷循環

如:通過内容判斷語句,屬于不同的内容顯示不同的回應

1)編寫test26.sh腳本檔案

Shell_06_判斷和循環判斷循環

2)調用test26.sh腳本檔案

Shell_06_判斷和循環判斷循環

循環

循環類别

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腳本檔案;

Shell_06_判斷和循環判斷循環

2)調用test3.sh腳本檔案

Shell_06_判斷和循環判斷循環

如:建立dir_perm.sh檔案實作判斷目錄下所有檔案的權限

1)編寫dir_perm.sh腳本檔案;

Shell_06_判斷和循環判斷循環

2)調用dir_perm.sh腳本檔案

Shell_06_判斷和循環判斷循環

内部字段分隔符(Internal Field Separator):Shell中用于分隔每個字段的字元

1)内部字元分隔符的變量位:IFS

2)預設值為:空格

3)指派格式:IFS=字元

//若有多個字元作為分隔符,可在指派時連寫在一起

如:将換行符、冒号、分号和雙引号作為分隔符的格式為:IFS=$‘\n’:;”

如:通過IFS變量實作for循環中的多個換行輸入

1)編寫test7.sh腳本檔案

Shell_06_判斷和循環判斷循環

2)調用test7.sh腳本檔案

Shell_06_判斷和循環判斷循環

指令格式2:

for (( 初始值;循環條件;指派運算 ))
do
程式段
done
           

1)格式類似于C語言的for循環,且可調用變量;

2)初始值和指派運算可有多個,但循環條件僅能有一個;

如:建立sum1_input.sh檔案,計算1加到輸入數的和

1)編寫sum1_input.sh腳本檔案

Shell_06_判斷和循環判斷循環

2)調用sum1_input.sh腳本檔案

Shell_06_判斷和循環判斷循環

如:在for循環中定義多個初始值和指派運算

1)編寫test8.sh腳本檔案

Shell_06_判斷和循環判斷循環

2)調用test8.sh腳本檔案

Shell_06_判斷和循環判斷循環

while do done

while循環:直到條件不成立才退出循環

指令格式:

while [ 判斷條件 ]
do
程式段
done
           

(1)若指定多個判斷條件時

1)隻根據最後一個判斷條件的傳回的狀态碼判斷是否繼續循環;

2)每個判斷條件需單獨占據一行;

3)多個判斷條件會依次執行;

(2)在done後添加輸出重定向,可将循環結果導入到指定檔案中;

如:通過while循環輸出數值

1)編寫test9.sh腳本檔案

Shell_06_判斷和循環判斷循環

2)調用test9.sh腳本檔案

Shell_06_判斷和循環判斷循環

until do done

until循環:直到條件成立才退出循環

指令格式:

until [ 判斷條件 ]
do
程式段
done
           

(1)若指定多個判斷條件時

1)隻根據最後一個判斷條件的傳回的狀态碼判斷是否繼續循環;

2)每個判斷條件需單獨占據一行;

3)多個判斷條件會依次執行;

(2)在done後添加輸出重定向,可将循環結果導入到指定檔案中;

控制循環

嵌套循環

嵌套循環(Nested Loop):循環的程式段内可調用任意類型的指令(包含循環)

如:建立choice_what.sh從數組中随機輸出三個數,且不能重複

1)編寫choice_what.sh腳本檔案

Shell_06_判斷和循環判斷循環

2)調用choice_what.sh腳本檔案

Shell_06_判斷和循環判斷循環

如:通過内部循環實作/etc/passwd檔案的格式化輸出

1)編寫test10.sh腳本檔案;

Shell_06_判斷和循環判斷循環

2)調用test10.sh腳本檔案

Shell_06_判斷和循環判斷循環

跳出循環

跳出循環分為:break指令、continue指令

(1)break指令:跳出目前正在執行循環,并結束循環

1)指令格式:break N

//N指定跳出的循環層級(若沒有,則預設為1)

如:通過break指令,跳出for循環

1)編寫test11.sh腳本檔案

Shell_06_判斷和循環判斷循環

2)調用test11.sh腳本檔案

Shell_06_判斷和循環判斷循環

(2)continue指令:跳出本次循環,開始下一次循環

1)指令格式:continue N

//N指定跳出的循環層級(若沒有,則預設為1)

如:通過continue跳出循環

1)編寫test12.sh腳本檔案

Shell_06_判斷和循環判斷循環

2)調用test12.sh腳本檔案

Shell_06_判斷和循環判斷循環

繼續閱讀