linux shell 编程:比较运算

介绍

Shell 比较运算主要用于条件判断(if、while 等语句),用来判断数字大小、字符串是否相等、文件属性等。

Shell 分两种核心比较场景:整数比较、字符串比较,还有文件测试,用法完全不同,千万不能混用(比如用字符串语法比数字会出错)。


整数比较(最常用)

专门用于 数字大小判断,语法:

[ 整数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 ]

整数比较示例

#!/bin/bash
a=10
b=5

# 执行比较
[ $a -gt $b ]

# 把结果赋值给变量 res
res=$?

echo "比较结果:$res"  # 输出 0(真)

使用$()

res=$([ 10 -gt 5 ])
echo $res  # 0

字符串比较

用于判断 文本是否相同、是否为空,语法:

[ "字符串1" 操作符 "字符串2" ]

提示:字符串建议加双引号,防止空格导致报错。

字符串比较操作符

操作符 含义 示例
= 相等 [ "$str1" = "$str2" ]
!= 不相等 [ "$str1" != "$str2" ]
-z 字符串长度为 0(空) [ -z "$str" ]
-n 字符串长度不为 0 [ -n "$str" ]

字符串比较示例

#!/bin/bash
str1="hello"
str2="world"
str3=""

if [ "$str1" = "$str2" ]; then
  echo "相等"
else
  echo "不相等"
fi

if [ -z "$str3" ]; then
  echo "str3 是空字符串"
fi

if [ -n "$str1" ]; then
  echo "str1 非空"
fi

高级:(( )) 数字比较(推荐简写)

Bash 支持 (( )),可以直接用数学符号比数字,更直观:

(( a > b ))   # 大于
(( a < b ))   # 小于
(( a == b ))  # 等于
(( a != b ))  # 不等于

例子

res=$((10 > 5))
echo $res  # 1(真)
res=$((10 < 5))
echo $res  # 0(假)

例子2

#!/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. 简写数字判断:(( )) 直接用 > < == !=

原文出处:/show_1GW3GjCeuzy1.html