Bash脚本中的条件语句
Bash脚本,与其他编程语言一样,具有if语句、循环和其他实用结构等功能,这些功能使该语言功能强大且用途广泛。
在使用bash或掌握bash脚本的过程中,理解最重要的概念之一是条件语句。条件语句允许我们根据给定条件执行某些代码或操作。
在本教程中,我们将学习如何在bash脚本中使用if语句,并附带示例和解释。
什么是条件语句?
一般来说,条件语句允许我们根据变量或表达式的值执行操作。这是通过将我们提供的值与条件进行匹配来实现的。
我们经常将其称为决策,因为脚本根据条件决定执行哪个部分。
bash中if语句的语法如下:
if condition then commands fi
在if关键字之后,我们放置需要测试的条件,在then关键字之后,我们放置如果给定条件为真则要执行的命令集。语句以fi关键字结尾,表示我们完成了该语句。请记住,语句以if开头,以fi结尾。
为了更清楚地说明这一点,让我们举个例子。创建一个文件并将其命名为,例如test.sh,其中包含以下代码:
#!/bin/bash x=2 y=2 if test $x -eq $y then echo "x and y are equal" fi exit 0
在这个简单的例子中,我们做了以下几件事:
- #!/bin/bash - 这里,我们使用shebang将文件定义为bash脚本文件。
- x=2 and y=2 - 我们定义了两个变量x和y,并将它们的值设置为2。
- if test $x -eq $y - 我们进行条件测试以检查变量x的值是否等于变量y的值。
- then echo "x and y are equal" - 在这里,我们指定如果条件为真将执行的指令。在这个例子中,我们打印一条消息,说明x和y相等。
- fi - 这个关键字表示我们完成了if语句。
现在,如果我们使用bash命令执行这段代码,我们将得到以下输出:
我们得到消息x and y are equal,因为我们制定的条件为真(x的值为2,y的值为2)。
如果您注意这个例子,我们会使用一个名为test的关键字,它允许我们评估条件。我们基本上是在告诉bash我们想要进行评估。
在一个真实的脚本中,如果您已经见过一个脚本,您可能看不到这个test关键字;相反,您会看到像这样用方括号括起来的语句:
if [ $x -eq $y ]
方括号告诉bash我们想要测试括号里的内容,它与test关键字的作用相同。在一些示例脚本中,您可能会看到双括号,如下所示:
if [[ $x -eq $y ]]
它们的作用相同,表示我们想要测试括号里的内容,但是双括号增加了更多功能,允许在括号内进行更复杂的评估。但是,双括号只在bash中有效;如果您尝试在其他环境中使用它们,它们将不起作用。
现在,问题是,如果条件为假,我们会得到什么?您可以通过更改x和y的值来尝试一下。但是,我们不会得到任何输出,因为我们没有指定如果条件为假该怎么做;我们只指定了真值的情况。
比较字符串
我们在上一个例子中所做的只是一个简单的代码,让我们了解如何通过比较两个变量来使用if条件。
但在大多数情况下,您不会处理这样的例子。相反,您可能需要比较其他东西,例如字符串。
让我们举一个需要将变量与给定字符串进行比较的例子。
#!/bin/bash echo "Enter your best website name" read name if [[ $name == "tutorialspoint" ]] then echo "You are Right; the best website is Tutorialspoint" fi exit 0
让我们了解这段脚本的作用:
- echo "Enter your best website name" - 这将把消息“输入您最好的网站名称”打印到屏幕上。
- read name - 这将等待用户输入名称。
- if [[ $name == "tutorialspoint" ]] - 在这里,我们检查输入的名称是否等于字符串“tutorialspoint”。
- echo "You are Right; the best website is Tutorialspoint" - 如果条件为真,则显示此消息。
现在,如果我们运行这段代码并输入字符串“tutorialspoint”,我们应该看到以下消息:
在这个例子中,我们检查输入的文本是否等于“tutorialspoint”,如果为真,则打印消息“You are Right; the best website is Tutorialspoint”。
请注意,我们在这里使用双括号进行测试。请确保括号和测试语句之间有空格,如下所示
[[ $name == "tutorialspoint" ]]
如果您像这样写[[$name == "tutorialspoint" ]] 或这样 [[ $name == "tutorialspoint"]],您将收到语法错误。
Else语句
在前面的例子中,我们只处理了if语句。我们写一个条件,如果条件为真,我们就做一些事情。else语句是我们可以添加的另一件事,它可以为我们的程序提供更多选项。或者,换句话说,我们告诉程序如果条件不为真该怎么做。在第一个例子中,我们只有真值的情况;我们没有看到假值的情况。
让我们举个例子来更清楚地说明这一点。将以下代码添加到test文件中:
#!/bin/bash echo "Enter your best website name" read name if [[ $name == "tutorialspoint" ]] then echo "You are Right the best website is Tutorialspoint" else echo "You chose $name" fi exit 0
这个例子与之前的例子相同,只是这里我们添加了else语句。因此,如果输入的名称不是“tutorialspoint”,则包含echo "You chose $name" 的代码块将被执行。
在这里,我们基本上打印输入的名称。如果条件为假,则输出应如下所示:
在这个例子中,输入的文本是google.com。
多个条件
有时我们需要在Bash脚本中检查多个条件。有一些不错的办法可以做到这一点,其中一种是使用管道(|)。
让我们来看一下之前的例子,在这个例子中,我们要求输入最好的网站名称,并将条件字符串设置为“tutorialspoint”。但是,如果我们以不同的样式输入相同的名称呢?例如,“tutorials point”或“Tutorials Point”,这是相同的名称,但我们的程序不会识别它,因为我们只输入了名称“tutorialspoint”。为了解决这个问题,我们可以这样做:
#!/bin/bash echo "Enter your best website name" read name if [[ $name == "tutorialspoint" || $name == "tutorials point" || $name == "Tutorials Point" ]] then echo "You are Right the best website is Tutorialspoint" else echo "You chose $name" fi exit 0
在这个例子中,我们只是使用管道运算符添加了更多测试。我们能够在同一行代码中检查多个测试。因此,如果我们尝试“tutorials point”,我们应该得到相同的结果。
Bash脚本在这种情况下有一些功能可以简化这一长行代码。我们可以使用一个技巧来避免每次都重复相同的变量:
#!/bin/bash echo "Enter your best website name" read name if [[ $name == @(tutorialspoint|tutorials point|Tutorials Point) ]] then echo "You are Right; the best website is Tutorialspoint" else echo "You chose $name" fi exit 0
我们将长行替换为花括号内的@()。我们放置选项并用管道||分隔它们。如果我们运行这段代码,我们应该得到相同的结果。
注意:此替换仅适用于双括号。
另一种方法是使用elif语句。我们在前面的例子中看到了如何使用else;使用elif,我们可以添加另一个具有不同结果的条件。
让我们来看一下以下例子:
#!/bin/bash echo "Enter your best website name" read name if [[ $name == "tutorialspoint" ]] then echo "You are Right; the best website is Tutorialspoint" elif [[ $name == "google" ]] then echo "Your best website is Google" else echo "You chose $name" fi exit 0
在这个例子中,我们使用elif [[ $name == "google" ]]添加了另一个条件,如果此条件为真,我们将有一个不同的代码块要执行。在这个例子中,它是一条简单的消息:Your best website is Google。
使用多个条件和elif语句的区别在于,elif为我们提供了另一个不同的选项。
结论
Bash脚本是一种简单而强大的语言,您可以通过练习示例和获得正确的解释来掌握它。
在本教程中,我们解释了如何在Bash中使用if语句使脚本更具交互性。我们从一个简单的例子开始,展示了条件语句是如何工作的,然后继续介绍在shell脚本中使用条件的不同方法。