本教程将引导您了解 Bash 的基础知识if
声明并向您展示如何在 shell 脚本中使用它。
决策是计算机编程最基本的概念之一。与任何其他编程语言一样,if
, if..else
, if..elif..else
,并嵌套if
Bash 中的语句用于根据特定条件执行代码。
if
陈述#
Bash if
条件句可以有不同的形式。最基本的if
声明采用以下形式:
if TEST-COMMAND
then
STATEMENTS
fi
The if
声明以if
关键字后跟条件表达式和then
关键词。该声明以fi
关键词。
If the TEST-COMMAND
评估为True
, the STATEMENTS
被处决。如果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
If the TEST-COMMAND
评估为True
, the STATEMENTS1
将被执行。否则,如果TEST-COMMAND
回报False
, the STATEMENTS2
将被执行。你只能拥有一个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
If the TEST-COMMAND1
评估为True
, the STATEMENTS1
将被执行。如果TEST-COMMAND2
评估为True
, the STATEMENTS2
将被执行。如果没有一个测试命令评估为True
, the STATEMENTS2
被执行。
您可以拥有一个或多个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
Nested 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.
多种条件#
逻辑性OR
and 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
测试操作员#
在 Bash 中,test
命令采用以下语法形式之一:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
为了使脚本可移植,最好使用旧的测试[
命令,可在所有 POSIX shell 上使用。全新升级版test
命令[[
(双括号)在使用 Bash、Zsh 和 Ksh 作为默认 shell 的大多数现代系统上受支持。
要否定测试表达式,请使用逻辑NOT
(!
) 操作员。什么时候比较字符串,始终使用单引号或双引号以避免分词和通配符问题。
以下是一些最常用的运算符:
-
-n
VAR
- 如果长度为 TrueVAR
大于零。
-
-z
VAR
- 正确,如果VAR
是空的。
-
STRING1 = STRING2
- 如果为真STRING1
and STRING2
是平等的。
-
STRING1 != STRING2
- 如果为真STRING1
and STRING2
不相等。
-
INTEGER1 -eq INTEGER2
- 如果为真INTEGER1
and INTEGER2
是平等的。
-
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
- True 如果文件存在并且是一个常规文件(不是目录或设备)。
结论#
The if
, if..else
and if..elif..else
语句允许您通过评估给定条件来控制 Bash 脚本的执行流程。
如果您有任何问题或反馈,请随时发表评论。