判断是计算机编程的最基本概念之一。就像任何其他的编程语言if
,if..else
,if..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-COMMAND
是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
命令将被执行。
Variable is greater than 10.
if..else语句
Bash if..else
语句采用以下形式:
if TEST-COMMAND
then
STATEMENTS1
else
STATEMENTS2
fi
如果结果TEST-COMMAND
为True
,STATEMENTS1
将执行,否则TEST-COMMAND
为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 TEST-COMMAND1
then
STATEMENTS1
elif TEST-COMMAND2
then
STATEMENTS2
else
STATEMENTS3
fi
如果结果TEST-COMMAND1
为True
,STATEMENTS1
将执行,如果结果TEST-COMMAND2
为True
,STATEMENTS2
将执行。如果所有测试命令都不为True
,STATEMENTS2
则执行。
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语句通常更有效。
多个条件
逻辑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 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
语句有一个很好的了解。您还可以阅读有关如何比较字符串以及如何检查文件是否存在的信息。
如果您有任何问题或反馈,请随时发表评论