期望的整数表达式 - linux

时间:2016-12-08 01:38:38

标签: linux bash shell terminal

我编写了一个bash脚本,它使用以下命令从文本文件中读取变量:

gcloud app deploy --version=1 app.yaml

然后我想测试这个数字是否大于12.5。如果是,则变量XX=`sed -n -e ''"$row"'p' $filename | awk '{print $4}'` echo $XX 12.88 应设置为1200。

ex

当我运行此脚本时,我收到以下错误:

if [ "$XX" -ge 12.5 ]
    then
        ex=1200
else
    echo boo

fi

当我[: 12.88: integer expression expected 我的代码时,似乎正确分配了变量。这是输出:

debug

我做错了什么?

1 个答案:

答案 0 :(得分:4)

bash shell不做浮点,它严格关注整数值(当然是字符串,但这是另一回事)。从bash手册页(我的斜体):

  

arg1 OP arg2 - OP-eq-ne-lt-le,{{}之一1}}或-gt。如果-ge分别等于,不等于,小于,小于或等于,大于或大于或等于arg1,则这些算术二元运算符返回true。 arg2Arg1可能是正整数或负整数。

你可以使用像arg2这样的工具进行这些比较,其中 了解浮点数:

bc

这是有效的,因为pax$ if (( $(bc <<<'3.14159 > 2.71828') )) ; then ...> echo pi is greater than e ...> else ...> echo pi is not greater than e ...> fi pi is greater than e pax$ if (( $(bc <<<'3.14159 < 2.71828') )) ; then ...> echo pi is less than e ...> else ...> echo pi is not less than e ...> fi pi is not less than e 可以进行浮点比较,如果是真的则为bc,否则为1

如果需要与变量进行比较,请确保使用双引号,以便解释变量:

0

您还可以在xx=3.14 pax$ if (( $(bc <<<"$xx < 2.71828") )) ; then ...> echo xx is less than e ...> else ...> echo xx is not less than e ...> fi xx is not less than e 中添加任意表达式,并bc只解释bash0的比较结果:

1