Bash 脚本 – If 语句
Bash 是命令语言的解释器。它是大多数 GNU/Linux 系统上的默认命令解释器,并且在各种操作系统上广泛可用。该名称是Bourne-Again SHell 的缩写。脚本可以执行指令,否则这些指令会以交互方式一一执行。
在本文中,我们将讨论 bash 脚本中的 if 语句。
如果语句
if 语句的基本语法如下:
if CONDITION
then
COMMANDS
fi
if 语句由 if 关键字、条件短语和 then 关键字组成。 fi 关键字用在语句的末尾。如果 CONDITION 评估为 True,则执行 COMMANDS。如果 CONDITION 返回 False,则什么也不会发生;命令被忽略。
例子:
以下是一个示例脚本,它将提示您输入一个数字,然后检查给定的数字是否为偶数。
echo -n "Enter Number: "
read x
if [ $((x%2)) == 0 ]; then
echo "Number is Even"
fi
输出:
if...else 语句
if…else 语句具有以下基本语法:
if CONDITION
then
COMMANDS_1
else
COMMANDS_2
fi
如果 CONDITION 评估为 True,则将执行 COMMANDS_1。否则,如果 CONDITION 返回 False,将运行 COMMANDS_2。语句中只能有一个else 子句。
例子:
让我们扩展上面示例中的脚本来检查给定的数字是偶数还是奇数。
echo -n "Enter Number: "
read x
if [ $((x%2)) == 0 ]; then
echo "Number is Even"
else
echo "Number is Odd"
fi
输出:
if...elif...else 语句
以下是 if...elif...else 语句的基本语法:
if CONDITION_1
then
COMMANDS_1
elif CONDITION_2
then
COMMANDS_2
else
COMMANDS_3
fi
如果 CONDITION_1 评估为 True,则将执行 COMMANDS_1。如果 CONDITION_2 评估为 True,则将执行 COMMANDS_2。如果没有任何测试命令评估为 True,则运行 COMMANDS_3。
在语句中,可以有一个或多个elif 子句。 else 子句是可选的。
例子:
让我们扩充上面示例中的代码以添加条件以检查是否为零。
echo -n "Enter Number: "
read x
if [ $x == 0 ]; then
echo "Number is Zero"
elif [ $((x%2)) == 0 ]; then
echo "Number is Even"
else
echo "Number is Odd"
fi
输出:
嵌套 if 语句
If 语句可以嵌套在 Bash 中的 if 语句中。多个 if 语句可以嵌套在另一个 if 语句中。像这样的东西:
if CONDITION_1
then
if CONDITION_2
then
COMMANDS_1
else
COMMANDS_2
fi
else
COMMANDS_3
fi
如果 CONDITION_1 和 CONDITION_2 都评估为 True,则将运行 COMMANDS_1。如果 CONDITION_2 评估为 False 而 CONDITION_1 保持为 True,则将执行 COMMANDS_2。否则,执行 COMMANDS_3。
例子:
让我们稍微调整一下上面的代码以使用nested-if。
echo -n "Enter Number: "
read x
if [ $((x%2)) == 0 ]; then
if [ $x == 0 ]; then
echo "Number is Zero"
else
echo "Number is Even"
fi
else
echo "Number is Odd"
fi
输出:
关于 CONDITION 的一些注意事项
这些是我在 bash 中编写测试条件时要记住的一些事情。
1. 确保括号和实际的检查/比较语句之间有空格。
例如,以下将不起作用。
if [$x==0]
Bash 将报告关于缺少 ]的错误。
2. 在添加新关键字之前始终结束该行,例如“then”。
if、then、else、elif 和 fi 都是 shell 关键字,这意味着它们不能在同一行中使用。放一个“;”在前一个语句和关键字之间,或以关键字开始新行。
3. 要在一个语句中使用多个条件,请使用逻辑运算符。
我们可以使用逻辑 AND(&&) 或逻辑 OR(||)运算符来使用多个条件。
例如:
if [[ $x -ge $y ]] && [[ $x -ge $z ]]; then
echo "x is greatest"
fi
这里,-ge 是大于或等于的简写