判断是计算机编程的最基本概念之一。就像任何其他的编程语言ifif..elseif..elif..else和嵌套if在Bash的语句可以用于基于特定条件来执行代码。

在本教程中,我们将向您介绍Bash if语句的基础知识,并向您展示如何在shell脚本中使用它们。

if声明

Bash if条件句可以具有不同的形式。最基本的if语句采用以下形式:

if TEST-COMMAND
then
  STATEMENTS
fi

if语句以if关键字开头,后跟条件表达式和then关键字。该语句以fi关键字结尾。

如果TEST-COMMAND计算结果为True,则STATEMENTS执行。如果TEST-COMMANDFalse,则什么也不会发生。

让我们看下面的例子:

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "Variable is greater than 10."
fi

该脚本将检查给定的数字是否大于10。将代码另存为文件,然后从命令行运行它。

bash test.sh

该脚本将提示您输入数字。例如,如果你输入15测试命令将评估为true,因为15大于10,echo命令将被执行。

Variable is greater than 10.

if..else语句

Bash if..else语句采用以下形式:

if TEST-COMMAND
then
  STATEMENTS1
else
  STATEMENTS2
fi

如果结果TEST-COMMANDTrueSTATEMENTS1将执行,否则TEST-COMMANDFalseSTATEMENTS2将执行。else语句中只能有一个子句。

让我们else在前面的脚本中添加一个子句:

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "Variable is greater than 10."
else
  echo "Variable is equal or less than 10."
fi

如果运行脚本并输入数字,脚本将根据数字是大于还是小于/等于10来打印不同的消息。

if..elif..else语句

Bash if..elif..else语句采用以下形式:

if TEST-COMMAND1
then
  STATEMENTS1
elif TEST-COMMAND2
then
  STATEMENTS2
else
  STATEMENTS3
fi

如果结果TEST-COMMAND1TrueSTATEMENTS1将执行,如果结果TEST-COMMAND2TrueSTATEMENTS2将执行。如果所有测试命令都不为TrueSTATEMENTS2则执行。

elif语句中可以有一个或多个子句。该else子句是可选的。

让我们elif在前面的脚本中添加一个子句:

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "Variable is greater than 10."
elif [[ $VAR -eq 10 ]]
then
  echo "Variable is equal to 10."
else
  echo "Variable is less than 10."
fi

嵌套的If语句

Bash允许您将if语句嵌套在if语句中。您可以if在另一个if语句中放置多个语句。

以下脚本将提示您输入三个数字,并在三个数字中打印最大的数字。

#!/bin/bash

echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]]
then
  if [[ $VAR1 -ge $VAR3 ]]
  then
    echo "$VAR1 is the largest number"
  else
    echo "$VAR3 is the largest number"
  fi
else
  if [[ $VAR2 -ge $VAR3 ]]
  then
    echo "$VAR2 is the largest number"
  else
    echo "$VAR3 is the largest number"
  fi
fi

输出如下所示:

Enter the first number: 4
Enter the second number: 7
Enter the third number: 2
7 is the largest number

代替使用嵌套if语句,使用case语句通常更有效。

多个条件

逻辑ORAND运算符允许您在if语句中使用多个条件。

这是脚本的另一个版本,可打印三个数字中最大的数字。在此版本中,if我们将使用逻辑AND(&&)运算符代替嵌套语句。

#!/bin/bash

echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
then
  echo "$VAR1 is the largest number"
elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
then
  echo "$VAR2 is the largest number"
else
  echo "$VAR3 is the largest number"
fi

test操作符

在Bash中,测试命令采用以下语法格式之一:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

如果希望脚本具有可移植性,则应该使用[所有POSIX Shell上都可用的旧测试命令。[[使用Bash,Zsh和Ksh作为默认Shell的大多数现代系统都支持test命令的新升级版本(双括号)。

要取消测试表达式,请使用逻辑NOT!)运算符。

以下是一些最常用的运算符:

  • -n VAR -如果VAR的长度大于零,则为true。
  • -z VAR -如果VAR为空,则为True。
  • STRING1 = STRING2 -真STRING1和STRING2相等。
  • STRING1 != STRING2 -真STRING1和STRING2不相等。
  • INTEGER1 -eq INTEGER2 -真INTEGER1和INTEGER2相等。
  • INTEGER1 -gt INTEGER2 -True INTEGER1大于INTEGER2。
  • INTEGER1 -lt INTEGER2 -True INTEGER1小于INTEGER2。
  • INTEGER1 -ge INTEGER2 -True INTEGER1等于或大于INTEGER2。
  • INTEGER1 -le INTEGER2 -True INTEGER1等于或小于INTEGER2。
  • -h FILE -如果FILE存在并且是符号链接,则为true。
  • -r FILE -如果FILE存在且可读,则为true。
  • -w FILE -如果FILE存在且可写,则为true。
  • -x FILE -如果FILE存在且可执行,则为true。
  • -d FILE -如果FILE存在并且是目录,则为true。
  • -e FILE -如果FILE存在且是文件,则与True无关,而与类型(节点,目录,套接字等)无关。
  • -f FILE -如果FILE存在并且是常规文件(而不是目录或设备),则为true。

结论

到目前为止,您应该对如何编写bash if语句有一个很好的了解。您还可以阅读有关如何比较字符串以及如何检查文件是否存在的信息

如果您有任何问题或反馈,请随时发表评论

如果你喜欢我们的内容可以选择在下方二维码中捐赠我们,或者点击广告予以支持,感谢你的支持