Shell脚本条件判断语法格式实战示例

 更新时间:2025年08月11日 14:37:55   作者:咖啡の猫  
本文将全面讲解 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条件判断内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Shell脚本如何启动/停止Java的jar程序

    使用Shell脚本如何启动/停止Java的jar程序

    这篇文章主要介绍了使用Shell脚本如何启动/停止Java的jar程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • linux shell文件转码iconv命令的使用

    linux shell文件转码iconv命令的使用

    本文主要介绍了linux shell文件转码iconv命令的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 浅析Linux之bash反弹shell原理

    浅析Linux之bash反弹shell原理

    这篇文章主要介绍了浅析Linux之bash反弹shell原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • linux shell实现折线图代码实例

    linux shell实现折线图代码实例

    这篇文章主要给大家介绍了关于linux shell实现折线图的相关资料,文中通过代码介绍的非常详细,对大家学习或者使用shell具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-12-12
  • 分享shell编程中的几个小技巧

    分享shell编程中的几个小技巧

    分享shell编程中的几个小技巧,学习shell编程的朋友可以看下
    2013-02-02
  • 详解Linux--shell脚本之正则表达式

    详解Linux--shell脚本之正则表达式

    本篇文章主要介绍了Linux--shell脚本之正则表达式,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • Linux-nohup命令使用方法详解

    Linux-nohup命令使用方法详解

    在Linux环境中,nohup命令用于在用户退出或注销后继续运行命令,当终端关闭时,所有在该终端中运行的进程会收到SIGHUP信号并被终止,但使用nohup可以避免这种情况,本文介绍了nohup的基本用法,感兴趣的朋友一起看看吧
    2024-09-09
  • Linux Shell获取文件夹下的文件名方法

    Linux Shell获取文件夹下的文件名方法

    今天小编就为大家分享一篇Linux Shell获取文件夹下的文件名方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 详解Shell cut用法

    详解Shell cut用法

    cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。本文重点给大家介绍Shell cut用法,感兴趣的朋友一起看看吧
    2017-10-10
  • 通过shell脚本循环进入目录执行命令的方法

    通过shell脚本循环进入目录执行命令的方法

    今天小编就为大家分享一篇通过shell脚本循环进入目录执行命令的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06

最新评论