Bash脚本中用于比较浮点数的正确语法

4

由于Bash脚本不支持浮点数,因此我在编写脚本时遇到了一个问题,无法从这个条件中生成命令。

if ([ $first_util -gt 0.10 ] || [ $first_util -le 1.00 ]) && [ $first_sig -ge $first_sig_min ]; then
  #state1   
else
  #state2   
fi 

我希望首先使用“或”来处理第一和第二个条件,然后再与第三个条件使用“且”,但在这种情况下,所有数字都是浮点数而不是整数。

如何解决这个问题?谢谢

2个回答

4
您可以使用 awk 命令:
first_util=0.2
first_sig=0.8
first_sig_min=0.9
awk_input="$first_util $first_sig $first_sig_min"
if awk '{ exit !(($1 > 0.1 || $1 <= 1.0) && ($2 >= $3)) }' <<< "$awk_input"; then
      echo "OK"
fi

以上使用了 awk 命令的返回值作为 if 条件测试的依据。

1
你可以创建一些函数,授予 bc 处理浮点数的能力,正如 Mitch Frazier 在 Linux Journal 中所描述的那样。

我相信你可以以此为基础创建自己的函数来进行浮点数比较。希望这能有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接