本部分内容参考自《Linux命令行与shell脚本编程大全 第3版》。
阅读本篇文章之前可先了解【bash 中的条件测试】。
使用if-then语句
最基本的结构化命令就是 if-then
语句。 if-then
语句有如下格式。
if command
then
commands
fi
如果你在用其他编程语言的 if-then
语句,这种形式可能会让你有点困惑。在其他编程语言中, if
语句之后的对象是一个等式,这个等式的求值结果为 TRUE
或 FALSE
。但 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
命令提供了一个更清晰的方法来为变量每个可能的值指定不同的选项。
评论区