Shell脚本编程(5)之条件判断

Shell脚本编程(5)之条件判断

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

本部分内容参考自《Linux命令行与shell脚本编程大全 第3版》。
阅读本篇文章之前可先了解【bash 中的条件测试】。

使用if-then语句

最基本的结构化命令就是 if-then 语句。 if-then 语句有如下格式。

if command
then
    commands
fi

如果你在用其他编程语言的 if-then 语句,这种形式可能会让你有点困惑。在其他编程语言中, if 语句之后的对象是一个等式,这个等式的求值结果为 TRUEFALSE。但 bash shell 的 if 语句并不是这么做的。
bash shell 的 if 语句会运行if后面的那个命令。如果该命令的退出状态码是 0(该命令成功运行),位于 then 部分的命令就会被执行。如果该命令的退出状态码是其他值, then 部分的命令就不会被执行, bash shell 会继续执行脚本中的下一个命令。 fi语句用来表示 if-then语句到此结束。

if-then-else语句

if-then 语句中,不管命令是否成功执行,你都只有一种选择。如果命令返回一个非零退出状态码, bash shell 会继续执行脚本中的下一条命令。在这种情况下,如果能够执行另一组命令就好了。这正是 if-then-else 语句的作用。
if-then-else 语句在语句中提供了另外一组命令。

if command
then
    commands
else
    commands
fi

if 语句中的命令返回退出状态码 0 时, then 部分中的命令会被执行,这跟普通的 if-then 语句一样。当 if 语句中的命令返回非零退出状态码时, bash shell 会执行 else 部分中的命令。

elif语句

可以使用 else 部分的另一种形式: elif。这样就不用再书写多个 if-then 语句了。 elif 使用另一个 if-then 语句延续 else 部分。

if command1
then
    commands
elif command2
then
    commands
else
    commands
fi

每块命令都会根据命令是否会返回退出状态码 0 来执行。记住, bash shell 会依次执行 if 语句,只有第一个返回退出状态码 0 的语句中的 then 部分会被执行。

case命令

你会经常发现自己在尝试计算一个变量的值,在一组可能的值中寻找特定值。在这种情形下,你不得不写出很长的 if-then-else 语句。
有了 case 命令,就不需要再写出所有的elif语句来不停地检查同一个变量的值了。case
令会采用列表格式来检查单个变量的多个值。

case variable in
pattern1 | pattern2) commands1;
pattern3) commands2;;
*) default commands;;
esac

case 命令会将指定的变量与不同模式进行比较。如果变量和模式是匹配的,那么 Shell 会执行
为该模式指定的命令。可以通过竖线操作符在一行中分隔出多个模式模式。星号会捕获所有与已
知模式不匹配的值。
case 命令提供了一个更清晰的方法来为变量每个可能的值指定不同的选项。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/shell-5.html

Buy me a cup of coffee ☕.