我编写了一个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
我做错了什么?
答案 0 :(得分:4)
bash
shell不做浮点,它严格关注整数值(当然是字符串,但这是另一回事)。从bash
手册页(我的斜体):
arg1 OP arg2
-OP
是-eq
,-ne
,-lt
,-le
,{{}之一1}}或-gt
。如果-ge
分别等于,不等于,小于,小于或等于,大于或大于或等于arg1
,则这些算术二元运算符返回true。arg2
和Arg1
可能是正整数或负整数。
你可以使用像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
只解释bash
或0
的比较结果:
1