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