如何在Bash中比较数字

问题:

我无法让数值比较工作正常:

bash 复制代码
echo "enter two numbers";
read a b;

echo "a=$a";
echo "b=$b";

if [ $a \> $b ];
then
    echo "a is greater than b";
else
    echo "b is greater than a";
fi;

问题在于,它比较的是从第一位开始的数,即9大于10,但1大于09

我如何将数字转换为一种类型来做真正的比较?


回答:

在 Bash 中,你可以在算术语境中进行比较:

bash 复制代码
if (( a > b )); then
    echo "a is greater than b";
fi

对于不支持 (()) 的 POSIX shell,可以使用 -lt-gt

咱们看以下示例代码:

bash 复制代码
# 比较两个数字的大小
a=10
b=20
if [ $a -gt $b ]; then
    echo "$a is greater than $b"
else
    echo "$a is not greater than $b"
fi

# 比较一个数字和一个字符串的大小
c=30
d="30"
if [ $c -lt $d ]; then
    echo "$c is less than $d"
else
    echo "$c is not less than $d"
fi

除此之外,整数还可以用以下操作符进行比较:

  • -eq: 等于
  • -ne: 不等于
  • -le: 小于等于
  • -ge: 大于等于

你可以使用命令 help testman test 获得比较操作符的完整列表及释义。

如果将表达式放在 [[ ]][ ] 中,进行整数比较时不要使用运算符 > <

bash 复制代码
root@linux:~# a=9
root@linux:~# b=10
root@linux:~# if (( $a < $b )) ; then   echo "$a < $b"; fi
9 < 10
root@linux:~# if [[ $a > $b ]] ; then   echo "$a > $b"; fi
9 > 10
root@linux:~# if [ $a > $b ] ; then   echo "$a > $b"; fi
9 > 10

其中后面两次比较都是将变量 ab 当作字符串按字典顺序进行排序比较的,所以执行结果跟我们的预期结果不一致。


参考:

  • stackoverflow question 18668556
  • help test

相关阅读:

相关推荐
兮动人5 分钟前
Linux 安装 Claude Code 实战:Node.js、npm、GLM 配置一次跑通
linux·npm·node.js·cc·claude code
自由随风飘6 分钟前
JAVA中的面向对象-3
java·开发语言
小羊先生car30 分钟前
RTOS-F429-HAL-(动/静态)任务的创建(2026/7/27)
开发语言·算法·c#
2301_777998341 小时前
Linux线程控制——从线程创建到线程分离(第三部分:线程等待 pthread_join)
linux·运维·服务器·c语言·c++
LONGZETECH1 小时前
新能源汽车动力系统仿真硬核拆解:五系统分层架构的设计逻辑与技术权衡
c语言·开发语言·架构·汽车·汽车仿真教学软件·汽车教学软件
醉城夜风~1 小时前
C++模板详解:从基础到高级全面解析
java·开发语言·c++
谜之锋1 小时前
Linux 源码编译安装 net-snmp-5.9.1 并配置使用 SNMPv3
linux·运维·服务器·snmpv3
地球驾驶员1 小时前
NX二次开发C#-获取体的外表面
开发语言·c#
一直在努力学习的菜鸟2 小时前
阿里云2G2核的服务器可以做什么?
linux·运维
誰能久伴不乏2 小时前
深入理解 C++ 多态:对象模型与底层机制解析
开发语言·c++·架构