Bash比较

时间:2012-05-05 10:10:29

标签: bash comparison floating-point

我有一个存储命令输出的变量。如何将它与浮点数进行比较?

更具体地说,我正在做

x=$(tail -n 1 foo| cut -d ' ' -f2)

if (($x < 0)); then ...

其中foo是文件名。在执行上述操作时,我收到以下错误

-0.08 < 0 : syntax error: invalid arithmetic operator (error token is "0.08 < 0")

我需要比较的值是-0.08,但错误标记是不同的

我应该怎么做这样的比较?

2 个答案:

答案 0 :(得分:3)

bash不支持浮点算术。
但是,您可以使用bc这是一个外部程序来进行算术运算。

if (( $(bc <<< "$x < 0") )); then 
    printf "%f is less than 0\n" "$x"; 
fi

来自手册页:

  

关系运算符是

  expr1 < expr2
         The result is 1 if expr1 is strictly less than expr2.

  expr1 <= expr2
         The result is 1 if expr1 is less than or equal to expr2.

  expr1 > expr2
         The result is 1 if expr1 is strictly greater than expr2.

  expr1 >= expr2
         The result is 1 if expr1 is greater than or equal to expr2.

  expr1 == expr2
         The result is 1 if expr1 is equal to expr2.

  expr1 != expr2
         The result is 1 if expr1 is not equal to expr2.

也可以使用也支持浮点算术的awk

答案 1 :(得分:0)

如果您可以使用ksh,则可以使用它来编写脚本而不是Bash,因为它支持浮点数。 Zsh还支持花车。

#!/usr/bin/ksh
x=$(tail -n 1 foo| cut -d ' ' -f2)

if ((x < 0))
then
    echo "less than"
fi