2012-10-18 48 views
0

问题的bash测试是在这一行对数范围(与浮点数)

elif [ "$(echo $a '>' $v06 | bc -l)" -eq 1 && "$(echo $a '<' $v08 | bc -l)" -eq 1 ];then 

如何测试,如果数量在范围内? 我知道有可能是这个其他的解决办法,但我想用这种方式与BC解决......

a=0.1 
v06=0.6 
v08=0.8 

if [ "$(echo $a '<' $v06 | bc -l)" -eq 1 ];then 
    echo " <0.6" 
elif [ "$(echo $a '>' $v06 | bc -l)" -eq 1 && "$(echo $a '<' $v08 | bc -l)" -eq 1 ];then 
    echo " <0.6 >0.8" 
else 
    echo ">1.5" 
fi 
+0

您是否知道在这种情况下您不会遇到elif? 0.1小于0.6,你正在测试$ a是否在0.6和0.8之间。我已经用0.7测试过了,然后在elif中的测试实际上工作。 – Friek

回答

0

如果你真的想使用BC:

test1=$(bc -l <<< "${a} < ${v06}") 
test2=$(bc -l <<< "${a} > ${v06}") 
test3=$(bc -l <<< "${a} < ${v08}") 
if [[ ${test1} -eq 1 ]]; then 
    blabla 
elif [[ ${test1} -eq 1 && ${test2} -eq 1 ]]; then 
    blabla 
fi 

我建议使用围绕可变括号(所以你一定06和08韩元”不能附加到$v),如果您使用的运算符如&&,则在测试中使用双括号。

1

可以剥去“0”。并使用-gt和-lt运营商:

v06="$(echo $v06 | sed 's/0.//')" 
v08="$(echo $v08 | sed 's/0.//')" 




elif [ $a -gt $v06 -a $a -lt $v08 ];then 
+0

这对测试中的花车无效(请参阅man测试)。 – Friek

+0

是的,这是我需要比较花车的问题。 。 。 – Lukap

+0

第43行:[:.6:预期的整数表达式 – Lukap

2

其实唯一错误的是你在[ ]里面使用&&这是行不通的。

只有[[ ]]可以包含&&多种测试条件。

你可以把&&外面,而不是像这样

elif [ "$(echo $a '>' $v06 | bc -l)" -eq 1 ] && [ "$(echo $a '<' $v08 | bc -l)" -eq 1 ]; then 

甚至更​​好

elif [ $(echo "($a > $v06) && ($a < $v08)" | bc -l) -eq 1 ]; then 

因为bc实际上支持(num1 > num2) && (num1 < num3)符号

P/S:即使它用引号括起来例如你可以有内$()报价:你不需要$()周围的引号,因为你只期望01作为返回值

P/S2

"$(echo "1 + 2" | bc -l)"