文章目录
- test 是最基础的条件判断命令,语法如下: test 表达式 示例: #!/bin/bash if test 10 -gt 5; then echo “10 大于 5” fi ✅ 特点:兼容性好,适用于所有 POSIX 标准的 shell。
- 这是 test 命令的等价写法,更常见于脚本中: [ 表达式 ] 注意: 中括号与表达式之间必须有空格! 示例: #!/bin/bash num=20 if [ $num -eq 20 ]; then echo “数值相等” fi ✅ 特点:简洁,广泛使用。⚠️ 注意:[ ] 不支持正则表达式和通配符匹配。
- [[ ]] 是 Bash 的扩展语法,功能更强大,支持字符串模式匹配、逻辑运算符 && 和 || 等。 [[ 表达式 ]] 示例: #!/bin/bash name=”alice” if [[ $name == “alice” ]]; then echo “用户名正确” fi # 支持通配符 if [[ $name == a* ]]; then echo “名字以 a 开头” fi ✅ 特点: 支持 &&、||、! 逻辑运算符 支持 ==、!= 字符串匹配(支持通配符) 不需要对变量加引号(但仍建议加) ⚠️ 注意:[[ ]] 仅在 Bash、Zsh 等现代 shell 中可用,不适用于 sh。
- (( )) 用于数值比较和算术运算,语法更接近 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 等参数
- 运算符 含义 示例 -eq 等于 [ 5 -eq 5 ] -ne 不等于 [ 5 -ne 3 ] -gt 大于 [ 5 -gt 3 ] -ge 大于等于 [ 5 -ge 5 ] -lt 小于 [ 3 -lt 5 ] -le 小于等于 [ 3 -le 5 ] 💡 使用 (( )) 时可用 >, <, == 等符号。
- 运算符 含义 示例 = 或 == 等于 [ "a" = "a" ] != 不等于 [ "a" != "b" ] -z 字符串为空 [ -z "" ] -n 字符串非空 [ -n "hello" ] 示例: str=”” if [ -z “$str” ]; then echo “字符串为空” fi ✅ 建议:字符串变量使用双引号包围,防止空值导致语法错误。
- 运算符 含义 示例 -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
目录
- 一、前言
- 二、Shell 条件判断的四种语法格式
- 1. 使用test命令
- 2. 使用[ ](中括号)
- 3. 使用[[ ]](双中括号)—— 推荐使用
- 4. 使用(( ))(双小括号)—— 数值计算专用
- 三、常用条件判断类型
- 1. 数值比较
- 2. 字符串比较
- 3. 文件测试
- 四、逻辑运算符
- 五、实战示例:判断文件是否存在并可读
- 六、常见错误与注意事项
- 七、结语
在 Linux 系统中,Shell 脚本是系统管理、自动化任务和运维工作中不可或缺的工具。而条件判断是 Shell 脚本中最核心的控制结构之一,它决定了程序的执行流程,让脚本具备“智能”判断能力。
本文将全面讲解 Shell 脚本中条件判断的语法格式,包括 test 命令、[ ]、[[ ]] 和 (( )) 四种常见形式,并结合实际示例帮助你掌握其使用方法和注意事项。
Shell 中有四种常用的条件判断写法,它们各有特点,适用于不同场景。
test 是最基础的条件判断命令,语法如下:
test 表达式
示例:
#!/bin/bash
if test 10 -gt 5; then
echo "10 大于 5"
fi
✅ 特点:兼容性好,适用于所有 POSIX 标准的 shell。
这是 test 命令的等价写法,更常见于脚本中:
[ 表达式 ]
注意: 中括号与表达式之间必须有空格!
示例:
#!/bin/bash
num=20
if [ $num -eq 20 ]; then
echo "数值相等"
fi
✅ 特点:简洁,广泛使用。
⚠️ 注意:[ ]不支持正则表达式和通配符匹配。
[[ ]] 是 Bash 的扩展语法,功能更强大,支持字符串模式匹配、逻辑运算符 && 和 || 等。
[[ 表达式 ]]
示例:
#!/bin/bash
name="alice"
if [[ $name == "alice" ]]; then
echo "用户名正确"
fi
# 支持通配符
if [[ $name == a* ]]; then
echo "名字以 a 开头"
fi
✅ 特点:
- 支持
&&、||、!逻辑运算符 - 支持
==、!=字符串匹配(支持通配符) - 不需要对变量加引号(但仍建议加)
⚠️ 注意:
[[ ]]仅在 Bash、Zsh 等现代 shell 中可用,不适用于sh。
(( )) 用于数值比较和算术运算,语法更接近 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等参数
| 运算符 | 含义 | 示例 |
|---|---|---|
-eq |
等于 | [ 5 -eq 5 ] |
-ne |
不等于 | [ 5 -ne 3 ] |
-gt |
大于 | [ 5 -gt 3 ] |
-ge |
大于等于 | [ 5 -ge 5 ] |
-lt |
小于 | [ 3 -lt 5 ] |
-le |
小于等于 | [ 3 -le 5 ] |
💡 使用
(( ))时可用>,<,==等符号。
| 运算符 | 含义 | 示例 |
|---|---|---|
= 或 == |
等于 | [ "a" = "a" ] |
!= |
不等于 | [ "a" != "b" ] |
-z |
字符串为空 | [ -z "" ] |
-n |
字符串非空 | [ -n "hello" ] |
示例:
str=""
if [ -z "$str" ]; then
echo "字符串为空"
fi
✅ 建议:字符串变量使用双引号包围,防止空值导致语法错误。
| 运算符 | 含义 | 示例 |
|---|---|---|
-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 Script条件判断详解
- shell中if条件判断的实现
- shell脚本语言之if条件判断语句实例详解
- Shell脚本中if条件判断的写法实例
- Linux shell条件判断if中的-a到-z的意思【推荐】
- Shell脚本IF条件判断和判断条件总结
- Linux shell脚本编程if语句的使用方法(条件判断)