Bash if..else 语句

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

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

if 语句

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

if CONDITION
then
  STATEMENTS
fi

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

如果 CONDITION 评估为 True ,则 STATEMENTS 将被执行。如果 CONDITIONFalse ,没有任何反应。

我们来看下面的例子:

#!/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 命令then

Variable is greater than 10.

if..else 语句

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

if CONDITION
then
  STATEMENTS1
else
  STATEMENTS2
fi

如果 CONDITION 计算结果 TrueSTATEMENTS1 将执行,否则如果 CONDITIONFalse ,则 STATEMENTS2 执行。您在语句中只能有一个 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 CONDITION1
then
  STATEMENTS1
elif CONDITION2
then
  STATEMENTS2
else
  STATEMENTS3
fi

如果 CONDITION1 计算结果为 TrueSTATEMENTS1 将执行,如果 CONDITION2 计算结果为 True ,则执行 STATEMENTS2。如果没有条件为 TrueSTATEMENTS3 则执行。

您可以在语句中包含一个或多个 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

使用 case 语句通常更有效,而不是使用嵌套 if 语句。

多个条件

逻辑 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 命令采用以下语法形式之一:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

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

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

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

  • -n  VAR  - 如果 VAR 的长度大于零,则为真。
  • -z  VAR  - 如果 VAR 为空,则为真。
  • STRING1 = STRING2 - 真正的 STRING1 和 STRING2 是相同的。
  • STRING1 ! = STRING2  - 真正的 STRING1 和 STRING2 不相等。
  • INTEGER1 -eq INTEGER2  - True 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 语句。您还可以阅读有关如何比较字符串以及如何检查文件是否存在的信息