linux shell 编程:比较运算 作者:马育民 • 2026-05-07 19:33 • 阅读:10000 # 介绍 Shell 比较运算主要用于**条件判断**(`if`、`while` 等语句),用来判断**数字大小**、**字符串是否相等**、**文件属性**等。 Shell 分两种核心比较场景:**整数比较**、**字符串比较**,还有**文件测试**,用法完全不同,**千万不能混用**(比如用字符串语法比数字会出错)。 --- # 整数比较(最常用) 专门用于 **数字大小判断**,语法: ```bash [ 整数1 操作符 整数2 ] ``` **注意:**`[` 后面、`]` 前面**必须有空格**! ### 整数比较操作符 | 操作符 | 含义 | 示例 | |--------|------|------| | `-eq` | 等于 (equal) | `[ $a -eq $b ]` | | `-ne` | 不等于 (not equal) | `[ $a -ne $b ]` | | `-gt` | 大于 (greater than) | `[ $a -gt $b ]` | | `-lt` | 小于 (less than) | `[ $a -lt $b ]` | | `-ge` | 大于等于 (greater equal) | `[ $a -ge $b ]` | | `-le` | 小于等于 (less equal) | `[ $a -le $b ]` | ### 整数比较示例 ```bash #!/bin/bash a=10 b=5 # 执行比较 [ $a -gt $b ] # 把结果赋值给变量 res res=$? echo "比较结果:$res" # 输出 0(真) ``` ### 使用$() ``` res=$([ 10 -gt 5 ]) echo $res # 0 ``` # 字符串比较 用于判断 **文本是否相同、是否为空**,语法: ```bash [ "字符串1" 操作符 "字符串2" ] ``` **提示:**字符串建议加**双引号**,防止空格导致报错。 ### 字符串比较操作符 | 操作符 | 含义 | 示例 | |--------|------|------| | `=` | 相等 | `[ "$str1" = "$str2" ]` | | `!=` | 不相等 | `[ "$str1" != "$str2" ]` | | `-z` | 字符串长度为 0(空) | `[ -z "$str" ]` | | `-n` | 字符串长度不为 0 | `[ -n "$str" ]` | ### 字符串比较示例 ```bash #!/bin/bash str1="hello" str2="world" [ "$str" = "$str2" ] res=$? echo $res # 0 ``` # 高级:(( )) 数字比较(推荐简写) Bash 支持 `(( ))`,可以**直接用数学符号**比数字,更直观: ```bash (( a > b )) # 大于 (( a < b )) # 小于 (( a == b )) # 等于 (( a != b )) # 不等于 ``` ### 例子 ``` res=$((10 > 5)) echo $res # 1(真) res=$((10 < 5)) echo $res # 0(假) ``` ### 例子2 ```bash #!/bin/bash a=10 b=5 if (( a > b )); then echo "$a > $b" fi ``` --- # 注意事项 1. **`[` 和 内容之间必须有空格** 错误:`[$a -gt $b]` 正确:`[ $a -gt $b ]` 2. **整数和字符串语法不能混用** 比数字用 `-gt/-lt/-eq`,比字符串用 `=/!=`。 3. **字符串变量建议加双引号** 防止变量为空或包含空格报错:`[ "$str" = "abc" ]` --- # 总结 1. **整数比较**:`-eq、-ne、-gt、-lt、-ge、-le` 2. **字符串比较**:`=、!=、-z、-n` 3. **文件判断**:`-e、-f、-d、-r、-w、-x` 4. **简写数字判断**:`(( ))` 直接用 `> < == !=` 原文出处:http://malaoshi.top/show_1GW3GjCeuzy1.html