Linux脚本中带有小数点的数值比较大小

691 阅读1分钟
原文链接: click.aliyun.com



a=1.2


b=1.1


 


如果直接用



if [ $a -gt $b ];then




echo "$a > $b"



fi


或者



if [ $a > $b ];then




echo "$a > $b"



fi


都会提示语法错误
[: 1.2: integer expression expected
没办法直接对带有小数点的数进行对比

 

shell的 test 对于数值的判断都是基于整数的,没办法对带有小数的数值直接进行对比。

我们可以通过其它变通的方法来进行对比:

1、[[   ]]





[[ $a > $b ]] &&  echo "$a > $b"



2、expr方法

比较妙的方法 expr $a \> $b
根据上面返回值来进行判断,等于0表示$a < $b,或者$a > $b




a=1.2


b=1.1



if [ `expr $a \> $b` -eq 0 ];then




echo "$a < $b"



else



echo "$a > $b"



fi


注意:上面两种方法如果位数不一致,就没办法正常对比。

 

3、bc计算(推荐使用)




a=1.0


b=1.1


 



if [ $(echo "$a > $b"|bc) -eq 0 ];then




echo "$a < $b"



else



echo "$a > $b"



fi


大于返回1,小于返回0

 

位数不一样的有小数的数字,判断是否相等:




a=1.0


b=1.0000


 



if [ $(echo "$a == $b"|bc) -eq 0 ];then




echo "$a != $b"



else



echo "$a = $b"



fi


还是这种方法比较好,推荐使用

 

4、awk





awk -v num1=6.6 -v num2=5.5 'BEGIN{print(num1>num2)?"0":"1"}'



如果num1>num2打印输出0,否则输出1