教程

具有多个条件的bash-if语句

在编写Bash脚本时,我们希望根据条件有多个可能的控制流。if条件语句可以隐式将测试表达式转换为布尔值,从而有条件地处理语句。使用if语句和多个条件,我们可以在值和预期之间进行逻辑比较。我们还可以使用多个条件可选地指定else子句。

在本教程中,我们将学习如何使用if语句连接多个条件。

多个条件

有时,使用if语句的测试表达式可能并不那么简单和直接。我们可能需要连接多个表达式来开发代码流的条件。对于这种涉及多个条件的情况,我们可以使用不同的方法。

使用Bash逻辑运算符

逻辑运算符以这样的方式连接两个或多个表达式,使得复合表达式的值仅取决于原始表达式和运算符的值。在Bash中,这些逻辑运算符是AND(&&)和OR(||)。

语法

[ EXPR1 ] && [ EXPR2 ]    如果EXPR1和EXPR2都为真,则为真。
[ EXPR1 ] || [ EXPR2 ]    如果EXPR1或EXPR2中任一一个为真,则为真。

例子

num=150``if` `[ $num -gt 100 ] && [ $num -lt 200 ]; ``then` `echo` `true``; ``else` `echo` `false``; ``fi

Bash将表达式拆分为更简单的表达式,然后单独评估每个表达式。完成后,它再查看逻辑运算符以重新组装这些表达式,以确定原始表达式的结果。在这个例子中,整数值存在于变量num中。if条件可以被视为2个单独的if语句。第一个检查变量是否大于100,这是真的。第二个检查数字是否小于200,这也是真的。由于两者都是真的,我们有一个逻辑AND,结果也变为真。这会触发“then”块中存在的语句。

使用单个测试别名

Bash允许我们使用逻辑运算符将多个条件合并为一个测试别名。我们需要使用-a(表示and)和-o(表示or)操作。评估如下:

语法

[ EXPR1 -a EXPR2 ]  如果EXPR1和EXPR2都为真,则为真。
[ EXPR1 -o EXPR2 ]  如果EXPR1或EXPR2中任一一个为真,则为真。

例子

num=150``if` `[ $num -gt 100 -a $num -lt 200 ]; ``then` `echo` `true``; ``else` `echo` `false``; ``fi``if` `[ $num -gt 100 -o $num -lt 50 ]; ``then` `echo` `true``; ``else` `echo` `false``; ``fi

Bash使用与前一个示例中相同的逻辑,将表达式拆分为更简单的表达式,然后单独评估每个表达式。然后,它检查运算符并重新组装这些表达式以计算原始表达式的结果。可以将此示例视为2个单独的if语句,使用-a标志连接在一起。由于两者都为真,结果为真,因此“then”块执行。

同样,在下一个示例中,表达式的第一部分为真,第二部分为假。使用-o标志将它们组合将导致结果为真,如果任何表达式的结果为真。

使用双方括号

使用if语句具有多个条件的另一种方法是使用双方括号符号。

语法

[[ EXPR1 && EXPR2 ]] 如果EXPR1和EXPR2都为真,则为真。[[ EXPR1 || EXPR2 ]] 如果EXPR1或EXPR2中任一一个为真,则为真。

例子

num=150``if` `[[ $num -gt 100 && $num -lt 200 ]]; ``then` `echo` `true``; ``else` `echo` `false``; ``fi``if` `[[ $num -gt 100 || $num -lt 50 ]]; ``then` `echo` `true``; ``else` `echo` `false``; ``fi

在这个例子中,我们使用双方括号,所以我们可以在条件测试中直接使用逻辑运算符。使用双方括号的好处之一是可以使用更多的比较运算符,例如=,!=,, =。

三元运算符

使用三元运算符来处理多个条件也是一种有效的方法。三元运算符是一个具有三个操作数的运算符,其中第一个操作数是一个比较运算符,第二个操作数是真值时返回的值,第三个操作数是假值时返回的值。

语法

[ EXPR1 ] && echo "true" || echo "false"

例子

num=150``[ $num -gt 100 ] && echo "true" || echo "false"``[ $num -lt 100 ] && echo "true" || echo "false"

在这个例子中,如果第一个测试条件为真,则输出true。否则,输出false。第二个测试条件返回false,因此我们得到了false输出。

使用case语句

使用case语句也是一种有效的方法来处理多个条件。case语句使用模式匹配来测试变量或表达式中的值,并根据匹配到的模式执行相应的命令。

语法

`case` `$variable` `in`
`pattern1` `)` `command1` `;;`
`pattern2` `)` `command2` `;;`
...
`patternN` `)` `commandN` `;;`
`esac`

例子

fruit=apple
case $fruit in
  apple) echo "This is an apple.";;
  banana) echo "This is a banana.";;
  *) echo "This is not an apple or a banana.";;
esac

在这个例子中,我们测试变量$fruit,并使用模式匹配测试其值。如果它匹配模式“apple”,则输出“This is an apple.”。如果它匹配模式“banana”,则输出“This is a banana.”。否则,输出“This is not an apple or a banana.”。

结论

在Bash脚本中,if语句是一种非常有用的工具,可用于控制流的条件处理。处理多个条件的方法有多种,包括逻辑运算符,单个测试别名,双方括号,三元运算符和case语句。您可以根据实际需要选择合适的方式。

对这篇文章感觉如何?

太棒了
1
不错
2
爱死了
0
不太好
0
感觉很糟
0

You may also like

Leave a reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

More in:教程

教程

在 Ubuntu 像22.04 LTS Linux 安装 JUnit 5

JUnit 不仅简单而且是一种有效的方法来编写和执行 Java 应用程序的单元测试,因此它是开源类别中使用最广泛的测试框架。 JUnit的最新版本5发布时带来了许多改进。 所以,如果你使用Ubuntu […]
教程

同时运行多个 Linux 命令

了解如何在 Linux 中同时执行多个命令可以显著提高您的效率和生产力。本文将指导您通过各种方式在单行中运行多个 Linux 命令,甚至如何自动化重复的任务。 理解基础知识 在深入了解高级技巧之前,您 […]
教程

在 Debian 12 或 11 Linux 上安装 Vanilla TeX Live

TeX Live 是一个全面的 TeX 排版系统发行版,最初由 Donald Knuth 开发。它提供了所有用于使用 TeX 及其变体(如 LaTeX、ConTeXt 等)排版文档所需的基本组件和软件包。它使用户能够创建专业质量的文档,包括书籍、科学论文、文章、演示文稿等