在shell脚本中,无法对浮点数进行比较,如:
max=0.1
min=0.01
if [ "$max" -gt "$min" ]
then
echo "YES"
else
echo "NO"
fi
这样的比较,运行后得到错误:
line 4: [: 0.1: integer expression expected
因为bc和awk都支持浮点数,可以使用bc进行处理:
max=0.1
min=0.01
if [ `echo "$max > $min" | bc` -eq ]
then
echo "YES"
else
echo "NO"
fi
也可以写成if [ $(echo "$max < $min"|bc) -eq 1 ]
 
每步的执行结果如下
[root@hnanet ~]# max=0.1
[root@hnanet ~]# min=0.01
[root@hnanet ~]# echo "$max > $min" | bc [root@hnanet ~]# echo "$max < $min" | bc [root@hnanet ~]# echo "$max < $min"
0.1 < 0.01

也可参考如下

下面是一个常规写法的示例:

if [ 1.1 -gt  ];then
echo "OK"
fi 直接会抛出如下异常: line : [: 1.1: integer expression expected 正确的写法如下: if [ `echo "1.1 > 1" | bc` -eq ];then
echo "OK"
fi

小数比较

前言

用于数值比较的无非大于、小于、等于、大于等于、小于等于这几个。

比较格式: [ 数值1 比较符 数值2 ] 注意左边的括号与数值1之间有一个空格,同样,数值2和右边的括号之间也有空格。

数值比较运算符对应下面几个:
-eq 判断相等,相等返回true,否则返回false
-ne 判断是否不相等,不相等返回true,否则返回false
-gt 判断左边是否大于右边的值,大于则返回true,否则返回false
-lt 判断左边是否小于右边的值,小于则返回true,否则返回false
-ge 判断左边是否大于或等于右边的值,大于则返回true,否则返回false
-le 判断左边是否小于右边的值,小于则返回true,否则返回false
小数的比较

1.shell中 可以用 bc 对小数进行运算
#echo 5.5+1.1 | bc
6.6

2.使用,awk判断小数点后的位数

num=6.6666;echo $num | awk 'BEGIN{FS="."}{printlength($2)}'

1

3.直接使用awk比较大小

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

1

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

4.使用expr,返回1表示a>
a>b, 0表示a&lt;

a<b

a=6.6 b=5.5;expr $a > $b

1

5.使用br

echo "6.6>5.5" |br

1

linux shell 中小数进行比较

if [ `expr $a \> $b` -eq 0 ];then
   echo $b is bigger
else
    echo $a is bigger
fi

原文链接:https://blog.csdn.net/david__peng/article/details/82980288

 
转自
shell 中浮点数和整数的比较-望月飞鱼-51CTO博客 https://blog.51cto.com/gavinshaw/776180
shell比较浮点数和整数 - breezey - 博客园 https://www.cnblogs.com/breezey/p/6806385.html
 
05-25 14:10