Bash if..else 语句
判断是计算机编程最基本的概念之一。就像任何其他的编程语言中的 if
, if..else
, if..elif..else
一样, if
在 Bash 的语句可以用来基于特定条件来执行代码。
在本教程中,我们将向您介绍 Bash if 语句的基础知识,并向您展示如何在 shell 脚本中使用它们。
if 语句
Bash 中 if
条件语句可以有不同的形式。最基本的 if
语句采用以下形式:
if CONDITION
then
STATEMENTS
fi
if 语句以 if
关键字后跟条件表达式和关键字 then
开头,语句以 fi
关键字结尾。
如果 CONDITION
评估为 True
,则 STATEMENTS
将被执行。如果 CONDITION
是 False
,没有任何反应。
我们来看下面的例子:
#!/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
计算结果 True
, STATEMENTS1
将执行,否则如果 CONDITION
是 False
,则 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
计算结果为 True
, STATEMENTS1
将执行,如果 CONDITION2
计算结果为 True
,则执行 STATEMENTS2
。如果没有条件为 True
, STATEMENTS3
则执行。
您可以在语句中包含一个或多个 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
语句。
多个条件
逻辑 OR
和 AND
运算符允许您在 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
语句。您还可以阅读有关如何比较字符串以及如何检查文件是否存在的信息。