笔记 | Bash 中 if 判断选项

在 Bash 脚本中,if 语句用于基于条件的执行。条件可以是命令的返回状态(成功即返回状态为0,失败则非零),或者表达式比较的结果。根据条件的真假,if 语句会执行或跳过一个代码块。

下面是一些常用的 if 语句选项和条件表达式:

  1. 文件测试运算符

    • -f FILE: 文件 FILE 存在且是一个常规文件。
    • -d DIR: 文件 DIR 存在且是一个目录。
    • -e FILE: 文件 FILE 存在。
    • -s FILE: 文件 FILE 存在且不为空。
    • -r FILE: 文件 FILE 存在且可读。
    • -w FILE: 文件 FILE 存在且可写。
    • -x FILE: 文件 FILE 存在且可执行。
  2. 字符串测试运算符

    • STRING1 = STRING2: 字符串 STRING1STRING2 相等。
    • STRING1 != STRING2: 字符串 STRING1STRING2 不相等。
    • -z STRING: 字符串 STRING 的长度为零。
    • -n STRING: 字符串 STRING 的长度非零。
  3. 整数比较运算符

    • 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
  4. 逻辑运算符

    • ! EXPRESSION: 条件 EXPRESSION 不成立。
    • EXPRESSION1 -a EXPRESSION2: 条件 EXPRESSION1EXPRESSION2 都成立(逻辑与)。
    • EXPRESSION1 -o EXPRESSION2: 条件 EXPRESSION1EXPRESSION2 有一个成立(逻辑或)。
  5. 复合条件

    • [[ EXPRESSION ]]: 使用 [[ ... ]] 可以防止一些脚本错误,比如字符串比较时不必担心空字符串或未知变量的问题,还支持正则表达式匹配。

一个基本的 if 语句看起来像这样:

if [ CONDITION ]; then
    # 如果 CONDITION 为真,执行这里的命令
fi

如果要增加其他条件分支,可以使用 elifelse

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 测试运算符:

  1. 文件测试运算符

    if [ -f /path/to/file ]; then
        echo "This is a regular file."
    fi
    
  2. 目录测试运算符

    if [ -d /path/to/dir ]; then
        echo "This is a directory."
    fi
    
  3. 文件存在性测试运算符

    if [ -e /path/to/file ]; then
        echo "This file exists."
    fi
    
  4. 文件非空测试运算符

    if [ -s /path/to/file ]; then
        echo "This file is not empty."
    fi
    
  5. 文件可读测试运算符

    if [ -r /path/to/file ]; then
        echo "This file is readable."
    fi
    
  6. 文件可写测试运算符

    if [ -w /path/to/file ]; then
        echo "This file is writable."
    fi
    
  7. 文件可执行测试运算符

    if [ -x /path/to/file ]; then
        echo "This file is executable."
    fi
    
  8. 字符串相等测试

    if [ "string1" = "string2" ]; then
        echo "The strings are equal."
    fi
    
  9. 字符串不等测试

    if [ "string1" != "string2" ]; then
        echo "The strings are not equal."
    fi
    
  10. 字符串长度为零测试

    if [ -z "$string" ]; then
        echo "The string is empty."
    fi
    
  11. 字符串长度非零测试

    if [ -n "$string" ]; then
        echo "The string is not empty."
    fi
    
  12. 整数比较 - 等于

    if [ $num1 -eq $num2 ]; then
        echo "The numbers are equal."
    fi
    
  13. 整数比较 - 不等于

    if [ $num1 -ne $num2 ]; then
        echo "The numbers are not equal."
    fi
    
  14. 整数比较 - 大于

    if [ $num1 -gt $num2 ]; then
        echo "$num1 is greater than $num2."
    fi
    
  15. 整数比较 - 大于等于

    if [ $num1 -ge $num2 ]; then
        echo "$num1 is greater than or equal to $num2."
    fi
    
  16. 整数比较 - 小于

    if [ $num1 -lt $num2 ]; then
        echo "$num1 is less than $num2."
    fi
    
  17. 整数比较 - 小于等于

    if [ $num1 -le $num2 ]; then
        echo "$num1 is less than or equal to $num2."
    fi
    
  18. 逻辑非

    if [ ! -f /path/to/file ]; then
        echo "The file does not exist."
    fi
    
  19. 逻辑与

    if [ -f /path/to/file1 ] && [ -f /path/to/file2 ]; then
        echo "Both files exist."
    fi
    
  20. 逻辑或

    if [ -f /path/to/file1 ] || [ -f /path/to/file2 ]; then
        echo "At least one file exists."
    fi
    

这些例子演示了如何在 Bash 脚本中使用不同的测试条件。务必记得,在 if 语句中 [ 实际上是一个调用 test 命令的句法糖,因此在 [ 和条件、条件和 ] 之间必须有空格。

你可能感兴趣的:(Linux,笔记,bash,linux,服务器)