如何在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

相关阅读:

相关推荐
韩楚风17 分钟前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学20 分钟前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO26 分钟前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu743 分钟前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我44 分钟前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、44 分钟前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程1 小时前
Linux中环境变量
linux
XKSYA(小巢校长)1 小时前
NatGo我的世界联机篇
开发语言·php
Cons.W1 小时前
Codeforces Round 975 (Div. 1) C. Tree Pruning
c语言·开发语言·剪枝
憧憬成为原神糕手1 小时前
c++_ 多态
开发语言·c++