Unix / Linux - Shell 决策製作
您好,有志成為程序員的各位!今天,我們將要深入探索Unix和Linux Shell腳本中的決策製作世界。作為你們友善的鄰居電腦老師,我會帶領你們一步一步地走過這段旅程。所以,拿起你們最喜歡的飲料,放鬆身心,讓我們一起踏上這次冒險吧!
if...else 語句
想像一下,你們的代碼處於一個交叉路口,你需要根據某些條件來做決策。這就是 if...else
語句派上用場的地方。它們就像編程中的交通燈,根據條件是真還是假,指導你的代碼走向不同的路徑。
基本的 if 語句
讓我們從 if
語句的最簡單形式開始:
if [ condition ]
then
command1
command2
...
commandN
fi
這裡有一個真實世界的例子:
#!/bin/bash
age=18
if [ $age -ge 18 ]
then
echo "你已經足夠年齡投票!"
fi
在這個例子中,我們正在檢查變量 age
是否大於或等於18。如果是,將會顯示消息 "你已經足夠年齡投票!"。
if...else 語句
現在,如果我們想在條件為假時做些什麼呢?這就是 else
條款派上用場的地方:
if [ condition ]
then
command1
command2
...
commandN
else
alternative_command1
alternative_command2
...
alternative_commandN
fi
讓我們修改我們的投票範例:
#!/bin/bash
age=16
if [ $age -ge 18 ]
then
echo "你已經足夠年齡投票!"
else
echo "對不起,你年紀太小,無法投票。"
fi
現在,如果年齡小於18歲,它將會顯示消息 "對不起,你年紀太小,無法投票。"
if...elif...else 語句
有時候,生活(和代碼)並不只是非黑即白。我們經常需要檢查多個條件。這就是 elif
(else if)條款派上用場的地方:
if [ condition1 ]
then
command1
elif [ condition2 ]
then
command2
else
alternative_command
fi
讓我們創建一個更複雜的例子:
#!/bin/bash
grade=75
if [ $grade -ge 90 ]
then
echo "A - 精彩!"
elif [ $grade -ge 80 ]
then
echo "B - 好工作!"
elif [ $grade -ge 70 ]
then
echo "C - 你通過了。"
else
echo "F - 你需要更加努力學習。"
fi
這個腳本評估一個學生的成績,並根據不同的成績範圍提供適當的反馈。
case...esac 語句
現在,想像一下你在一個有許多食物選擇的自助餐。這就是編程中的 case...esac
語句的作用。它允許你將一個值與一組模式進行匹配,並根據匹配結果執行命令。
基本語法如下:
case expression in
pattern1)
command1
command2
...
commandN
;;
pattern2)
command1
command2
...
commandN
;;
*)
default_command
;;
esac
讓我們看一個實際的例子:
#!/bin/bash
fruit="apple"
case $fruit in
"apple")
echo "這是一個美味的紅色水果!"
;;
"banana")
echo "這是一個黃色彎曲的水果!"
;;
"orange")
echo "這是一個多汁的柑橘水果!"
;;
*)
echo "我不知道這個水果。"
;;
esac
在這個例子中,我們正在將 fruit
的值與不同的模式進行匹配。如果它與 "apple" 匹配,它將會顯示對應的消息。如果它與任何指定模式都不匹配,它將會執行默認情況(*
)。
多個模式
你也可以為同一組命令匹配多個模式:
#!/bin/bash
day=$(date +%A)
case $day in
Monday|Tuesday|Wednesday|Thursday|Friday)
echo "這是工作日。該工作啦!"
;;
Saturday|Sunday)
echo "這是週末。該放鬆啦!"
;;
*)
echo "你在哪個星球上?"
;;
esac
這個腳本檢查當前的星期的哪一天,並輸出它是工作日還是週末。
if...else 與 case...esac 的比較
現在,讓我們比較這兩種決策製作結構:
特性 | if...else | case...esac |
---|---|---|
複雜性 | 可以處理複雜條件 | 最適合簡單值匹配 |
可讀性 | 有許多條件時難以閱讀 | 有多個條件時更易於閱讀 |
效率 | 為許多條件時稍慢 | 為許多條件時更快 |
靈活性 | 可以使用任何類型的條件 | 局限於模式匹配 |
在我多年的教學經驗中,我發現學生經常為了在 if...else
和 case...esac
間選擇而苦惱。這裡有一個簡單的經驗法則:如果你正在檢查一個變量對多個可能的值,case...esac
是你的好朋友。對於其他情況,則繼續使用 if...else
。
記住,編程就像烹飪。這些決策製作結構是你的食材,通過練習,你將學會在什麼時候使用每一個來創造完美的菜餚...我是說,腳本!
總結來說,決策製作是 Shell 編程的一個關鍵方面。它讓你的腳本能夠適應和回應不同的情況,使它們更加强大和靈活。無論你是使用 if...else
還是 case...esac
,現在你都擁有了讓你的腳本更聰明的工具。繼續練習,不久你將能夠比說 "sudo" 更快地編寫出能夠做決策的腳本!
Credits: Image by storyset