Bash if..else语句
在本教程中,我们将向您介绍bashif语句的基本知识,并向您展示如何在shell脚本中使用它。
决策是计算机程序设计中最基本的概念之一。
与任何其他编程语言一样,Bash中的if、if..else、if..elif..else和嵌套if语句可用于根据特定条件执行代码。
if语句
Bash if条件句可以有不同的形式。
最基本的if语句采用以下形式:
if TEST-COMMAND then STATEMENTS fi
if语句以if关键字开头,后跟条件表达式和then关键字。
语句以fi关键字结束。
如果TEST-COMMAND的计算结果为True,则执行语句。
如果TEST-COMMAND返回False,则不会发生任何情况,语句将被忽略。
通常,总是缩进代码并用空行分隔代码块是一个很好的实践。
大多数人选择使用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,然后将执行then子句中的echo命令。
The variable is greater than 10.
if..else语句
Bash if..else语句采用以下形式:
if TEST-COMMAND then STATEMENTS1 else STATEMENTS2 fi
如果TEST-COMMAND的计算结果为True,则将执行语句1。
否则,如果TEST-COMMAND返回False,则将执行语句2。
语句中只能有一个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语句
Bash if..elif..else语句采用以下形式:
if TEST-COMMAND1 then STATEMENTS1 elif TEST-COMMAND2 then STATEMENTS2 else STATEMENTS3 fi
如果TEST-COMMAND1的计算结果为True,则将执行语句1。
如果TEST-COMMAND2的计算结果为True,则将执行语句2。
如果没有一个测试命令的计算结果为True,则执行语句2。
语句中可以有一个或者多个elif子句。
else子句是可选的。
条件按顺序计算。
如果剩余的条件未执行,则返回控制项的结束条件。
让我们在前面的脚本中添加一个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语句
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运算符允许您在if语句中使用多个条件。
这是另一个版本的脚本,打印三个数字中最大的一个。
在这个版本中,我们使用逻辑AND(&&)运算符,而不是嵌套的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 ]] && [[ $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 ]]
为了使脚本可移植,最好使用旧的test[
,该命令在所有POSIX shell上都可用。
大多数使用Bash、Zsh和Ksh作为默认shell的现代系统都支持est [[
(双括号)的新升级版本。
(
要对测试表达式求反,请使用逻辑NOT(!)运算符。
比较字符串时,请始终使用单引号或者双引号,以避免分词和通配符问题。
以下是一些最常用的运算符:
-n VAR-如果VAR的长度大于零,则为True。
-z VAR-如果变量为空,则为True。
STRING1=STRING2-如果STRING1和STRING2相等,则为True。
STRING1!=STRING2-如果STRING1和STRING2不相等,则为True。
INTEGER1-eq INTEGER2-如果INTEGER1和INTEGER2相等,则为True。
INTEGER1-gt INTEGER2-如果INTEGER1大于INTEGER2,则为True。
INTEGER1-lt INTEGER2-如果INTEGER1小于INTEGER2,则为True。
INTEGER1-ge INTEGER2-如果INTEGER1等于或者大于INTEGER2,则为True。
INTEGER1-le INTEGER2-如果INTEGER1等于或者小于INTEGER2,则为True。
-h FILE-如果文件存在并且是符号链接,则为True。
-r FILE-如果文件存在且可读,则为True。
-w FILE-如果文件存在且可写,则为True。
-x文件-如果文件存在且可执行,则为True。
-d FILE-如果文件存在并且是一个目录,则为True。
-e FILE—如果文件存在并且是文件,则为True,而不考虑类型(节点、目录、套接字等)。
-f FILE—如果文件存在并且是常规文件(不是目录或者设备),则为True。