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中有效;如果您尝试在其他环境中使用它们,它们将不起作用。

现在,问题是,如果条件为假,我们会得到什么?您可以通过更改xy的值来尝试一下。但是,我们不会得到任何输出,因为我们没有指定如果条件为假该怎么做;我们只指定了真值的情况。

比较字符串

我们在上一个例子中所做的只是一个简单的代码,让我们了解如何通过比较两个变量来使用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脚本中使用条件的不同方法。

更新于:2024年11月21日

浏览量:1

开启您的职业生涯

通过完成课程获得认证

开始学习
广告