Shell if else語句(詳解版)
和其它編程語言類似,shell 也支持選擇結構,并且有兩種形式,分別是 if else 語句和 case in 語句。本節我們先介紹 if else 語句,case in 語句將會在《Shell case in》中介紹。
如果你已經熟悉了C語言、Java、JavaScript 等其它編程語言,那么你可能會覺得 Shell 中的 if else 語句有點奇怪。
如果你喜歡,也可以將 then 和 if 寫在一行:
84↙
84↙
a和b相等
在《Shell (())》一節中我們講到,
20↙
56↙
你都成年了,智商怎么還不及格!
來C語言中文網(http://c.biancheng.net/)學習編程吧,能迅速提高你的智商。
熟悉其他編程語言的讀者請注意,即使 then 后邊有多條語句,也不需要用
舉個例子:
10↙
20↙
a 和 b 不相等,輸入錯誤
從運行結果可以看出,a 和 b 不相等,判斷條件不成立,所以執行了 else 后邊的語句。
整條語句的執行邏輯為:
舉個例子,輸入年齡,輸出對應的人生階段:
19
成年
運行結果2:
100
老年
再舉一個例子,輸入一個整數,輸出該整數對應的星期幾的英文表示:
Input integer number: 4
Thursday
運行結果2:
Input integer number: 9
error
如果你已經熟悉了C語言、Java、JavaScript 等其它編程語言,那么你可能會覺得 Shell 中的 if else 語句有點奇怪。
if 語句
最簡單的用法就是只使用 if 語句,它的語法格式為:
if condition
then
statement(s)
fi
condition
是判斷條件,如果 condition 成立(返回“真”),那么 then 后邊的語句將會被執行;如果 condition 不成立(返回“假”),那么不會執行任何語句。
從本質上講,if 檢測的是命令的退出狀態,我們將在下節《Shell退出狀態》中深入講解。注意,最后必須以
fi
來閉合,fi 就是 if 倒過來拼寫。也正是有了 fi 來結尾,所以即使有多條語句也不需要用{ }
包圍起來。如果你喜歡,也可以將 then 和 if 寫在一行:
if condition; then
statement(s)
fi
;
,當 if 和 then 位于同一行的時候,這個分號是必須的,否則會有語法錯誤。
實例1
下面的例子使用 if 語句來比較兩個數字的大?。?#!/bin/bash read a read b if (( $a == $b )) then echo "a和b相等" fi運行結果:
84↙
84↙
a和b相等
在《Shell (())》一節中我們講到,
(())
是一種數學計算命令,它除了可以進行最基本的加減乘除運算,還可以進行大于、小于、等于等關系運算,以及與、或、非邏輯運算。當 a 和 b 相等時,(( $a == $b ))
判斷條件成立,進入 if,執行 then 后邊的 echo 語句。實例2
在判斷條件中也可以使用邏輯運算符,例如:#!/bin/bash read age read iq if (( $age > 18 && $iq < 60 )) then echo "你都成年了,智商怎么還不及格!" echo "來C語言中文網(/d/file/202003/nxe4ss2v2dx1244.html fi運行結果:
20↙
56↙
你都成年了,智商怎么還不及格!
來C語言中文網(http://c.biancheng.net/)學習編程吧,能迅速提高你的智商。
&&
就是邏輯“與”運算符,只有當&&
兩側的判斷條件都為“真”時,整個判斷條件才為“真”。熟悉其他編程語言的讀者請注意,即使 then 后邊有多條語句,也不需要用
{ }
包圍起來,因為有 fi 收尾呢。
if else 語句
如果有兩個分支,就可以使用 if else 語句,它的格式為:
if condition
then
statement1
else
statement2
fi
舉個例子:
#!/bin/bash read a read b if (( $a == $b )) then echo "a和b相等" else echo "a和b不相等,輸入錯誤" fi運行結果:
10↙
20↙
a 和 b 不相等,輸入錯誤
從運行結果可以看出,a 和 b 不相等,判斷條件不成立,所以執行了 else 后邊的語句。
if elif else 語句
Shell 支持任意數目的分支,當分支比較多時,可以使用 if elif else 結構,它的格式為:
if condition1
then
statement1
elif condition2
then
statement2
elif condition3
then
statement3
……
else
statementn
fi
整條語句的執行邏輯為:
- 如果 condition1 成立,那么就執行 if 后邊的 statement1;如果 condition1 不成立,那么繼續執行 elif,判斷 condition2。
- 如果 condition2 成立,那么就執行 statement2;如果 condition2 不成立,那么繼續執行后邊的 elif,判斷 condition3。
- 如果 condition3 成立,那么就執行 statement3;如果 condition3 不成立,那么繼續執行后邊的 elif。
- 如果所有的 if 和 elif 判斷都不成立,就進入最后的 else,執行 statementn。
舉個例子,輸入年齡,輸出對應的人生階段:
#!/bin/bash read age if (( $age <= 2 )); then echo "嬰兒" elif (( $age >= 3 && $age <= 8 )); then echo "幼兒" elif (( $age >= 9 && $age <= 17 )); then echo "少年" elif (( $age >= 18 && $age <=25 )); then echo "成年" elif (( $age >= 26 && $age <= 40 )); then echo "青年" elif (( $age >= 41 && $age <= 60 )); then echo "中年" else echo "老年" fi運行結果1:
19
成年
運行結果2:
100
老年
再舉一個例子,輸入一個整數,輸出該整數對應的星期幾的英文表示:
#!/bin/bash printf "Input integer number: " read num if ((num==1)); then echo "Monday" elif ((num==2)); then echo "Tuesday" elif ((num==3)); then echo "Wednesday" elif ((num==4)); then echo "Thursday" elif ((num==5)); then echo "Friday" elif ((num==6)); then echo "Saturday" elif ((num==7)); then echo "Sunday" else echo "error" fi運行結果1:
Input integer number: 4
Thursday
運行結果2:
Input integer number: 9
error
beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。
通俗易懂,深入淺出,一篇文章只講一個知識點。
文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。
文章不涉及代碼,不燒腦細胞,人人都可以學習。
當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!