2013-07-30 111 views
2

我想进行简单的数学运算,以检查变量是否大于或等于“1.5” 但我得到[: 2.41: integer expression expected击:整数表达式预期

代码:

reSum=$(expr "scale=1;555/230" | bc) 

if [ $reSum -ge "1.5" ]; then 
... 
fi 

我如何在shell脚本中进行浮点比较?

+2

从'info expr'' <<= = == != > =>' 比较参数并返回1(如果关系为真),否则返回0 。 '=='是'='的同义词。 'expr'首先尝试 将两个参数转换为整数并进行数字比较;如果 任一转换失败,则使用“LC_COLLATE” 区域设置指定的字符比较序列使用 执行字典对比。 – shellter

回答

7
if echo 555 230 | awk '{exit $1/$2 >= 1.5 ? 0 : 1}' 
then 
    # ... 
fi 
1

编辑:

为我的作品最短的解决方案:

reSum=$(expr "scale=1;555/230" | bc) 

if ((`echo $reSum'>='1.5 | bc`)); then 
    # anything 
fi 

正如shellter指出,[ $(expr "$reSum > 1.5" | bc) ]实际上做了字典比较。 因此,例如,expr "2.4 > 18 | bc" // =>0

但是,((`echo $reSum'>='1.5 | bc`))会进行浮点比较而不是字符串。