Shell脚本条件判断语法格式实战示例
作者:咖啡の猫
本文将全面讲解 Shell 脚本中条件判断的语法格式,包括 test 命令、[ ]、[[ ]] 和 (( )) 四种常见形式,并结合实际示例帮助你掌握其使用方法和注意事项,需要的朋友跟随小编一起看看吧
一、前言
在 Linux 系统中,Shell 脚本是系统管理、自动化任务和运维工作中不可或缺的工具。而条件判断是 Shell 脚本中最核心的控制结构之一,它决定了程序的执行流程,让脚本具备“智能”判断能力。
本文将全面讲解 Shell 脚本中条件判断的语法格式,包括 test 命令、[ ]、[[ ]] 和 (( )) 四种常见形式,并结合实际示例帮助你掌握其使用方法和注意事项。
二、Shell 条件判断的四种语法格式
Shell 中有四种常用的条件判断写法,它们各有特点,适用于不同场景。
1. 使用test命令
test 是最基础的条件判断命令,语法如下:
test 表达式
示例:
#!/bin/bash
if test 10 -gt 5; then
    echo "10 大于 5"
fi✅ 特点:兼容性好,适用于所有 POSIX 标准的 shell。
2. 使用[ ](中括号)
这是 test 命令的等价写法,更常见于脚本中:
[ 表达式 ]
注意: 中括号与表达式之间必须有空格!
示例:
#!/bin/bash
num=20
if [ $num -eq 20 ]; then
    echo "数值相等"
fi✅ 特点:简洁,广泛使用。
⚠️ 注意:[ ]不支持正则表达式和通配符匹配。
3. 使用[[ ]](双中括号)—— 推荐使用
[[ ]] 是 Bash 的扩展语法,功能更强大,支持字符串模式匹配、逻辑运算符 && 和 || 等。
[[ 表达式 ]]
示例:
#!/bin/bash
name="alice"
if [[ $name == "alice" ]]; then
    echo "用户名正确"
fi
# 支持通配符
if [[ $name == a* ]]; then
    echo "名字以 a 开头"
fi✅ 特点:
- 支持 
&&、||、!逻辑运算符 - 支持 
==、!=字符串匹配(支持通配符) - 不需要对变量加引号(但仍建议加)
 
⚠️ 注意:
[[ ]]仅在 Bash、Zsh 等现代 shell 中可用,不适用于sh。
4. 使用(( ))(双小括号)—— 数值计算专用
(( )) 用于数值比较和算术运算,语法更接近 C 语言。
(( 表达式 ))
示例:
#!/bin/bash
a=10
b=5
if (( a > b )); then
    echo "a 大于 b"
fi
# 支持复合运算
if (( a > 5 && b < 10 )); then
    echo "条件成立"
fi✅ 特点:
- 专用于数值判断
 - 支持 
>,<,>=,<=,==,!=,&&,||等 - 写法简洁,无需使用 
-gt、-lt等参数 
三、常用条件判断类型
1. 数值比较
| 运算符 | 含义 | 示例 | 
|---|---|---|
-eq | 等于 | [ 5 -eq 5 ] | 
-ne | 不等于 | [ 5 -ne 3 ] | 
-gt | 大于 | [ 5 -gt 3 ] | 
-ge | 大于等于 | [ 5 -ge 5 ] | 
-lt | 小于 | [ 3 -lt 5 ] | 
-le | 小于等于 | [ 3 -le 5 ] | 
💡 使用
(( ))时可用>,<,==等符号。
2. 字符串比较
| 运算符 | 含义 | 示例 | 
|---|---|---|
= 或 == | 等于 | [ "a" = "a" ] | 
!= | 不等于 | [ "a" != "b" ] | 
-z | 字符串为空 | [ -z "" ] | 
-n | 字符串非空 | [ -n "hello" ] | 
示例:
str=""
if [ -z "$str" ]; then
    echo "字符串为空"
fi✅ 建议:字符串变量使用双引号包围,防止空值导致语法错误。
3. 文件测试
| 运算符 | 含义 | 示例 | 
|---|---|---|
-f file | 是否为普通文件 | [ -f /etc/passwd ] | 
-d dir | 是否为目录 | [ -d /tmp ] | 
-e file | 是否存在 | [ -e /bin/bash ] | 
-r file | 是否可读 | [ -r file.txt ] | 
-w file | 是否可写 | [ -w file.txt ] | 
-x file | 是否可执行 | [ -x script.sh ] | 
示例:
if [ -f "/etc/hosts" ]; then
    echo "hosts 文件存在"
fi四、逻辑运算符
| 运算符 | 说明 | 用法 | 
|---|---|---|
&& | 逻辑与 | [[ 条件1 && 条件2 ]] | 
| ` | ` | |
! | 逻辑非 | [[ ! 条件 ]] | 
⚠️ 注意:
[ ]中需使用-a(与)、-o(或),不推荐使用。- 推荐使用 
[[ ]]配合&&和||,更清晰易读。 
五、实战示例:判断文件是否存在并可读
#!/bin/bash
filename="data.txt"
if [[ -f "$filename" && -r "$filename" ]]; then
    echo "文件存在且可读,开始处理..."
    cat "$filename"
else
    echo "文件不存在或不可读!"
    exit 1
fi六、常见错误与注意事项
| 错误 | 原因 | 解决方法 | 
|---|---|---|
| 缺少空格 | [ $var=5 ] | 正确写法:[ $var = 5 ] | 
| 变量未加引号 | $var 为空时报错 | 使用 "$var" | 
使用 [ ] 写复杂逻辑 | 不支持 &&、` | |
在 sh 中使用 [[ ]] | 兼容性问题 | 改为 [ ] 或使用 bash 执行 | 
七、结语
到此这篇关于Shell脚本条件判断语法格式实战示例的文章就介绍到这了,更多相关shell条件判断内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
