浮动有条件的bash

时间:2010-04-21 13:01:36

标签: bash

在bash中我需要比较两个浮点数,一个我在脚本中定义,另一个读作参数,为此我做了:

   if [[ $aff -gt 0 ]]
    then
            a=b
            echo "xxx "$aff
            #echo $CX $CY $CZ $aff
    fi

但是我收到了错误:

[[:-309.585300:语法错误:算术运算符无效(错误标记为“.585300”)

有什么问题?

由于

6 个答案:

答案 0 :(得分:7)

使用bc而不是awk:

float1='0.43255'
float2='0.801222'

if [[ $(echo "if (${float1} > ${float2}) 1 else 0" | bc) -eq 1 ]]; then
   echo "${float1} > ${float2}"
else
   echo "${float1} <= ${float2}"
fi

答案 1 :(得分:4)

使用awk

#!/bin/bash
num1=0.3
num2=0.2
if [ -n "$num1" -a -n "$num2" ];then
  result=$(awk -vn1="$num1" -vn2="$num2" 'BEGIN{print (n1>n2)?1:0 }')
  echo $result
  if [ "$result" -eq 1 ];then
   echo "$num1 greater than $num2"
  fi
fi

答案 2 :(得分:3)

test(通常链接为[)和bash - 内置等价物仅支持整数。

答案 3 :(得分:2)

使用bc检查数学

a="1.21231"
b="2.22454" 
c=$(echo "$a < $b" | bc)
if [ $c = '1' ]; then 
    echo 'a is smaller than b'
else 
    echo 'a is larger than b'
fi

答案 4 :(得分:0)

我会使用awk:

e=2.718281828459045
pi=3.141592653589793
if [ "yes" = "$(echo | awk "($e <= $pi) { print \"yes\"; }")" ]; then
    echo "lessthanorequal"
else
    echo "larger"
fi

答案 5 :(得分:0)

最简单的解决方案是:

f1=0.45
f2=0.33
if [[ $f1 > $f2 ]] ; then echo "f1 is greater then f2"; fi

(在OSX上)输出:

f1 is greater then f2

这是另一个结合浮点和整数运算的例子(你需要可以从here下载的极好的perl脚本calc.pl):

dateDiff=1.9864
nObs=3
i=1
while [[ $dateDiff > 0 ]] &&  [ $i -le $nObs ]
do
  echo "$dateDiff > 0"
  dateDiff=`calc.pl $dateDiff-0.224`
  i=$((i+1))
done

哪个输出

1.9864 > 0
1.7624 > 0
1.5384 > 0