0

问题出在这一行

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
4

3 回答 3

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 )" 
于 2012-10-18T12:14:26.330 回答
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
于 2012-10-18T10:26:17.840 回答
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),如果您使用诸如&&.

于 2012-10-18T10:32:16.420 回答