Bash if..else语句

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

决策是计算机编程的最基本概念之一。 像其他任何编程语言一样, ifif..elseif..elif..else 并嵌套 if Bash中的语句可用于根据特定条件执行代码。

if 声明编号

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

if TEST-COMMAND
then
  STATEMENTS
fi

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

如果 TEST-COMMAND 评估为 TrueSTATEMENTS 被执行。 如果 TEST-COMMAND 退货 False,什么也没发生, STATEMENTS 被忽略。

通常,良好的做法是始终缩进代码并用空行分隔代码块。 大多数人选择使用4空格还是2空格缩进。 缩进和空白行使您的代码更具可读性和组织性。

让我们看下面的示例脚本,该脚本检查给定数字是否大于10:

#!/bin/bash

echo -n "Enter a number: "
read VAR

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

将代码保存在文件中,然后从命令行运行它:

bash test.sh

该脚本将提示您输入一个数字。 例如,如果您输入15, test 命令将计算为 true 因为15大于10,并且 echo 里面的命令 then 子句将被执行。

The variable is greater than 10.

if..else 声明编号

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

if TEST-COMMAND
then
  STATEMENTS1
else
  STATEMENTS2
fi

如果 TEST-COMMAND 评估为 TrueSTATEMENTS1 将被执行。 否则,如果 TEST-COMMAND 退货 FalseSTATEMENTS2 将被执行。 你只能有一个 else 语句中的子句。

让我们添加一个 else 上一个示例脚本的子句:

#!/bin/bash

echo -n "Enter a number: "
read VAR

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

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

if..elif..else 声明编号

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

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

如果 TEST-COMMAND1 评估为 TrueSTATEMENTS1 将被执行。 如果 TEST-COMMAND2 评估为 TrueSTATEMENTS2 将被执行。 如果没有任何测试命令求和 TrueSTATEMENTS2 被执行。

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

条件被顺序评估。 一旦条件恢复 True 其余条件未执行,程序控制移至 if 陈述。

让我们添加一个 elif 上一个脚本的子句:

#!/bin/bash

echo -n "Enter a number: "
read VAR

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

巢状 if 声明#

重击让你筑巢 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

测试操作员

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

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

为了使脚本具有可移植性,建议使用旧测试 [ 在所有POSIX shell上都可用的命令。 的新升级版本 test 命令 [[ 使用Bash,Zsh和Ksh作为默认shell的大多数现代系统都支持(双括号)。

要否定测试表达式,请使用逻辑 NOT!)运算符。 比较字符串时,请始终使用单引号或双引号,以避免单词分裂和乱码问题。

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

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

结论#

ifif..elseif..elif..else 语句允许您通过评估给定条件来控制Bash脚本的执行流程。

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

bash终端

Sidebar