如何在bash中使用if测试非整数

时间:2015-11-19 06:00:30

标签: linux bash ubuntu

我尝试验证带小数的数字是否在指定范围之间,我的意思如下例:

rangeA=58.5
rangeB=61.5
number=62.7

 if [[ ( "$number" > "$rangeA" | bc ) || ( "$number" = "$rangeA" | bc ) ]] && [[ ( "$number" < "$rangeB" | bc ) || ( "number" = "rangeB" | bc ) ]]; then

但是我坚持这个行动,我将非常感谢你的帮助 感谢

4 个答案:

答案 0 :(得分:4)

您可以使用awk:

rangeA=58.5
rangeB=61.5
number=62.7

if awk -v number=$number -v rangeA=$rangeA -v rangeB=$rangeB  '
   BEGIN{exit !(number >= rangeA && number <= rangeB)}'
then
   echo "condition matched"
else
   echo "condition didn't match"
fi

答案 1 :(得分:3)

Bash的<>比较字符串,-lt-gt比较整数,比较浮点数的唯一方法是shell to { {1}}(你这样做,但你做错了):

bc(1)

rangeA=58.5 rangeB=61.5 number=62.7 if (( $(bc <<<"$number >= $rangeA && $number <= $rangeB") )); then echo yes else echo no fi 将1或0打印到标准输出,bash的算术上下文(bc)将其测试为零并相应地设置状态代码。

答案 2 :(得分:1)

bc可以使用&#34;和&#34;,&&或&#34;或&#34;,||逻辑对数字进行复杂测试。如果条件为真,bc1回显到标准输出。我们可以使用1grep -q 1测试-q,其中grep选项告诉if bc <<< "$number >= $rangeA && $number <= $rangeB" | grep -q 1 then echo True else echo False fi 安静并且不会在stdout上产生任何内容:

double[][] input = new double[5][5];

// initialize arr here

ClassName num1 = new ClassName(input);

答案 3 :(得分:1)

不确定您的if是否是必需的,但您也可以使用awk中的三元运算符:

awk -v n=$number -v a=$rangeA -v b=$rangeB \
    'BEGIN{print(n >= a && n <= b)?"yes":"no"}'

隐含的if-else的排序。