在 Bash 脚本中,if 语句用于基于条件的执行。条件可以是命令的返回状态(成功即返回状态为0,失败则非零),或者表达式比较的结果。根据条件的真假,if 语句会执行或跳过一个代码块。
下面是一些常用的 if 语句选项和条件表达式:
-
文件测试运算符:
-f FILE: 文件FILE存在且是一个常规文件。-d DIR: 文件DIR存在且是一个目录。-e FILE: 文件FILE存在。-s FILE: 文件FILE存在且不为空。-r FILE: 文件FILE存在且可读。-w FILE: 文件FILE存在且可写。-x FILE: 文件FILE存在且可执行。
-
字符串测试运算符:
STRING1 = STRING2: 字符串STRING1和STRING2相等。STRING1 != STRING2: 字符串STRING1和STRING2不相等。-z STRING: 字符串STRING的长度为零。-n STRING: 字符串STRING的长度非零。
-
整数比较运算符:
INTEGER1 -eq INTEGER2: 整数INTEGER1等于INTEGER2。INTEGER1 -ne INTEGER2: 整数INTEGER1不等于INTEGER2。INTEGER1 -gt INTEGER2: 整数INTEGER1大于INTEGER2。INTEGER1 -ge INTEGER2: 整数INTEGER1大于等于INTEGER2。INTEGER1 -lt INTEGER2: 整数INTEGER1小于INTEGER2。INTEGER1 -le INTEGER2: 整数INTEGER1小于等于INTEGER2。
-
逻辑运算符:
! EXPRESSION: 条件EXPRESSION不成立。EXPRESSION1 -a EXPRESSION2: 条件EXPRESSION1和EXPRESSION2都成立(逻辑与)。EXPRESSION1 -o EXPRESSION2: 条件EXPRESSION1和EXPRESSION2有一个成立(逻辑或)。
-
复合条件:
[[ EXPRESSION ]]: 使用[[ ... ]]可以防止一些脚本错误,比如字符串比较时不必担心空字符串或未知变量的问题,还支持正则表达式匹配。
一个基本的 if 语句看起来像这样:
if [ CONDITION ]; then
# 如果 CONDITION 为真,执行这里的命令
fi
如果要增加其他条件分支,可以使用 elif 和 else:
if [ CONDITION1 ]; then
# 如果 CONDITION1 为真,执行这里的命令
elif [ CONDITION2 ]; then
# 如果 CONDITION1 为假但 CONDITION2 为真,执行这里的命令
else
# 如果 CONDITION1 和 CONDITION2 都为假,执行这里的命令
fi
例子:检查文件是否存在并可读。
if [ -f /path/to/file ] && [ -r /path/to/file ]; then
echo "File exists and is readable"
else
echo "File does not exist or is not readable"
fi
在编写 Bash 脚本时,正确使用 if 语句和条件表达式是非常关键的。这些运算符和测试条件可以组合使用,以执行更复杂的逻辑判断。
举例时间
当然,以下是一些 if 语句的例子,每个例子都演示了不同的 Bash 测试运算符:
-
文件测试运算符:
if [ -f /path/to/file ]; then echo "This is a regular file." fi -
目录测试运算符:
if [ -d /path/to/dir ]; then echo "This is a directory." fi -
文件存在性测试运算符:
if [ -e /path/to/file ]; then echo "This file exists." fi -
文件非空测试运算符:
if [ -s /path/to/file ]; then echo "This file is not empty." fi -
文件可读测试运算符:
if [ -r /path/to/file ]; then echo "This file is readable." fi -
文件可写测试运算符:
if [ -w /path/to/file ]; then echo "This file is writable." fi -
文件可执行测试运算符:
if [ -x /path/to/file ]; then echo "This file is executable." fi -
字符串相等测试:
if [ "string1" = "string2" ]; then echo "The strings are equal." fi -
字符串不等测试:
if [ "string1" != "string2" ]; then echo "The strings are not equal." fi -
字符串长度为零测试:
if [ -z "$string" ]; then echo "The string is empty." fi -
字符串长度非零测试:
if [ -n "$string" ]; then echo "The string is not empty." fi -
整数比较 - 等于:
if [ $num1 -eq $num2 ]; then echo "The numbers are equal." fi -
整数比较 - 不等于:
if [ $num1 -ne $num2 ]; then echo "The numbers are not equal." fi -
整数比较 - 大于:
if [ $num1 -gt $num2 ]; then echo "$num1 is greater than $num2." fi -
整数比较 - 大于等于:
if [ $num1 -ge $num2 ]; then echo "$num1 is greater than or equal to $num2." fi -
整数比较 - 小于:
if [ $num1 -lt $num2 ]; then echo "$num1 is less than $num2." fi -
整数比较 - 小于等于:
if [ $num1 -le $num2 ]; then echo "$num1 is less than or equal to $num2." fi -
逻辑非:
if [ ! -f /path/to/file ]; then echo "The file does not exist." fi -
逻辑与:
if [ -f /path/to/file1 ] && [ -f /path/to/file2 ]; then echo "Both files exist." fi -
逻辑或:
if [ -f /path/to/file1 ] || [ -f /path/to/file2 ]; then echo "At least one file exists." fi
这些例子演示了如何在 Bash 脚本中使用不同的测试条件。务必记得,在 if 语句中 [ 实际上是一个调用 test 命令的句法糖,因此在 [ 和条件、条件和 ] 之间必须有空格。
本文详细介绍了Bash脚本中if语句的使用,包括条件判断的各种选项(如文件测试、字符串比较、整数比较等),以及逻辑运算符的运用,帮助开发者理解和编写更复杂的逻辑控制。
5151

被折叠的 条评论
为什么被折叠?



