服务器测评网
我们一直在努力

Linux shell if 语法有哪些常用判断条件和写法?

Linux Shell if 语法是 shell 脚本中实现条件判断的核心机制,它允许脚本根据不同的条件执行不同的命令序列,从而实现自动化任务的逻辑控制,掌握 if 语法对于编写高效、健壮的 shell 脚本至关重要,本文将详细介绍其语法结构、常用判断条件及实际应用场景。

Linux shell if 语法有哪些常用判断条件和写法?

if 语法的基本结构

Shell 中的 if 语法基于条件判断的结果(真或假)来决定执行流程,其基本结构遵循“if-then-else”的逻辑框架,根据需求的不同,if 语法可分为简单条件判断、双分支判断和多分支判断三种形式。

简单条件判断(if-then)

当条件为真时执行一组命令,条件为假时则跳过,基本语法如下:

if [ condition ]; then
    commands
fi

condition 是判断条件,[ ] 是 test 命令的简写,用于执行条件测试;thenfi 分别是条件判断的开始和结束标志,fiif 的反向拼写,判断文件是否存在:

if [ -f "/etc/passwd" ]; then
    echo "文件存在"
fi

双分支判断(if-then-else)

当条件为真时执行一组命令,为假时执行另一组命令,语法结构如下:

if [ condition ]; then
    commands_true
else
    commands_false
fi

判断用户输入是否为空:

read -p "请输入内容: " input
if [ -z "$input" ]; then
    echo "输入不能为空"
else
    echo "输入内容: $input"
fi

多分支判断(if-then-elif-else)

当存在多个条件时,通过 elif(else if)扩展判断分支,依次检查每个条件,直到某个条件为真时执行对应命令,若所有条件均为假,则执行 else 分支,语法如下:

if [ condition1 ]; then
    commands1
elif [ condition2 ]; then
    commands2
else
    commands_default
fi

根据分数划分等级:

Linux shell if 语法有哪些常用判断条件和写法?

read -p "请输入分数: " score
if [ $score -ge 90 ]; then
    echo "优秀"
elif [ $score -ge 80 ]; then
    echo "良好"
elif [ $score -ge 60 ]; then
    echo "及格"
else
    echo "不及格"
fi

条件判断的类型

Shell 中的条件判断主要通过 test 命令或 [ ] 实现,支持多种判断类型,包括文件测试、数值比较、字符串测试和逻辑组合。

文件测试

用于检查文件的状态,如是否存在、是否可读、是否为目录等,常用文件测试操作符如下表所示:

操作符 说明 示例
-f 判断文件是否存在且为普通文件 [ -f "file.txt" ]
-d 判断目录是否存在 [ -d "/tmp" ]
-e 判断文件或目录是否存在 [ -e "/etc/passwd" ]
-r 判断文件是否可读 [ -r "script.sh" ]
-w 判断文件是否可写 [ -w "output.txt" ]
-x 判断文件是否可执行 [ -x "program" ]
-s 判断文件是否非空 [ -s "data.log" ]

数值比较

用于比较两个数值的大小关系,支持整数比较,不支持小数(需借助 bc 等工具),常用操作符如下:

操作符 说明 示例
-eq 等于(equal) [ $a -eq $b ]
-ne 不等于(not equal) [ $a -ne $b ]
-gt 大于(greater than) [ $a -gt $b ]
-ge 大于等于(greater or equal) [ $a -ge $b ]
-lt 小于(less than) [ $a -lt $b ]
-le 小于等于(less or equal) [ $a -le $b ]

字符串测试

用于判断字符串是否为空、是否相等、是否包含子串等,常用操作符如下:

操作符 说明 示例
-z 字符串长度是否为0 [ -z "$str" ]
-n 字符串长度是否非0 [ -n "$str" ]
字符串是否相等 [ "$str1" = "$str2" ]
字符串是否不相等 [ "$str1" != "$str2" ]
同 (部分 shell 支持) [ "$str1" == "$str2" ]
同 (部分 shell 支持) [ "$str1" != "$str2" ]

逻辑组合

通过逻辑操作符组合多个条件,实现复杂的判断逻辑,常用逻辑操作符如下:

操作符 说明 示例
&& 逻辑与(条件1且条件2为真) [ -f "file.txt" ] && [ -r "file.txt" ]
逻辑或(条件1或条件2为真) [ -d "/tmp" ] || [ -d "/var/tmp" ]
逻辑非(取反) [ ! -z "$str" ]

注意:逻辑操作符两侧的条件需用 [ ] 分隔,且 && 和 的优先级高于 if 的条件判断,建议通过括号明确逻辑层级。

if 语法的高级应用

结合正则表达式判断

通过 case 语句(常与 if 联合使用)或 grep 命令,可以实现正则表达式匹配,判断输入是否为手机号:

Linux shell if 语法有哪些常用判断条件和写法?

read -p "请输入手机号: " phone
if [[ $phone =~ ^1[3-9][0-9]{9}$ ]]; then
    echo "手机号格式正确"
else
    echo "手机号格式错误"
fi

[[ ]]test 的扩展支持,支持正则表达式匹配和字符串模式匹配。

结合命令执行结果判断

通过 获取上一条命令的退出状态(0 表示成功,非 0 表示失败),可用于判断命令执行是否成功。

if ping -c 1 -W 1 www.baidu.com &>/dev/null; then
    echo "网络连通"
else
    echo "网络不通"
fi

或直接使用 :

ping -c 1 -W 1 www.baidu.com &>/dev/null
if [ $? -eq 0 ]; then
    echo "网络连通"
else
    echo "网络不通"
fi

结合函数使用

将 if 逻辑封装到函数中,提高代码复用性。

check_file() {
    local file="$1"
    if [ -f "$file" ]; then
        echo "文件 $file 存在"
        return 0
    else
        echo "文件 $file 不存在"
        return 1
    fi
}
check_file "/etc/hosts"

注意事项

  1. 空格规范[ ] 内的条件与操作符之间必须有空格,否则会报错。[ -f file.txt ] 正确,[ -f file.txt ] 错误。
  2. 变量引用:判断变量时,建议用双引号包裹变量(如 "$var"),避免变量为空或包含空格时导致语法错误。
  3. 逻辑优先级:复杂条件判断时,使用 &&、 和括号明确优先级,避免因默认优先级导致逻辑错误。
  4. 脚本调试:通过 set -x 可开启脚本调试模式,查看 if 语句的执行流程和条件判断结果,便于排查问题。

Linux Shell if 语法是实现脚本逻辑控制的基础,通过灵活运用简单判断、多分支判断及各类条件测试,可以编写出适应复杂场景的自动化脚本,掌握文件测试、数值比较、字符串测试和逻辑组合等核心功能,并注意书写规范,能够有效提升脚本的健壮性和可维护性,在实际开发中,建议结合具体需求设计条件逻辑,并通过调试工具优化脚本性能。

赞(0)
未经允许不得转载:好主机测评网 » Linux shell if 语法有哪些常用判断条件和写法?