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

156 阅读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