linux shell中的浮点比较

时间:2015-01-21 02:40:57

标签: linux bash floating-point comparison

我试图在Linux销售中实现这一点

set a=1.2345
set b=2.34

if (abs(a-b)>1.2) then
...
endif

我面临几个问题:

  • 处理浮点
  • 比较(使用$ vs不使用它)
  • 计算绝对值

我无法解决我的问题并立即处理所有这些问题。我搜索了很多页面,有些解决方案对我不起作用。例如,我似乎没有abs功能。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

bash不做浮点运算。标准实用程序bc可以。这使用bc来执行您要求的测试:

a=1.2345
b=2.34

r=$(echo "($a - $b)^2 > 1.2^2" | bc)
if [ "$r" -eq 1 ]
then
        echo True
else
        echo False
fi

由于bc没有abs函数,因此上面的代码使用简单的解决方法来平衡不等式的每一边。如果测试为真,则bc会返回1,如果为真,则0会返回r。此输出保存在变量r中。使用1测试[ "$r" -eq 1 ]if的相等性。 {{1}}语句会相应地做出响应。