Unix/Linux - Shell决策制作

你好,有抱负的程序员们!今天,我们将深入Unix和Linux shell脚本的决策制作世界。作为你友好的邻居计算机老师,我将引导你一步一步地走完这段旅程。所以,拿起你最喜欢的饮料,舒服地坐好,让我们一起开始这次冒险吧!

Unix / Linux - Decision Making

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...elsecase...esac之间犹豫。这里有一个简单的经验法则:如果你正在检查单个变量与多个可能值的匹配,case...esac就是你的朋友。对于其他情况,坚持使用if...else

记住,编程就像烹饪。这些决策结构是你的食材,通过实践,你将学会在何时使用每一种来创造出完美的菜肴……我是说,脚本!

总之,决策是shell脚本的关键方面。它允许你的脚本适应和响应不同的情况,使它们更加强大和灵活。无论你使用if...else还是case...esac,你现在都已经装备了使你的脚本更智能的工具。继续练习,很快你就能写出比说“sudo”还快的脚本!

Credits: Image by storyset