Bash 脚本 "integer expression expected" ,在 bash 中使用浮点数而不是其他语言
Bash Script "integer expression expected" , use of floats in bash instead of other language
我是 bash 脚本的新手。我的代码是:
MK=M
SM=1.4
if [[ $MK == "M" ]]
then
if [ $SM -gt 1.3 ]
then
echo "Greater than 1.3M"
else
echo "Less than 1.3M"
fi
else
echo "Not yet M...."
fi
回复:
/tmp/tmp.sh: line 6: [: 1.4: integer expression expected
Less than 1.3M
我做错了什么?
man bash
是这样说的:
arg1 OP arg2
... Arg1 and arg2 may be positive or negative integers.
您似乎在尝试比较浮点数。
归根结底是因为 bash 对浮点数不是很有耐心。在这里用非常简单的术语来说,我建议您做以下两件事之一:
您似乎在尝试确定某些内容是否大于 1.3 Mb,是否正确?如果是这种情况,请保留所有内容,只需将 Kb 用于 $sm
和比较
像这样:
#/bin/bash
mk="p"
km="p"
sm="1400"
ms="1300"
if [[ $mk == $km ]]
then
if [ $sm > $ms ]
then
echo "Greater than 1.3M"
else
echo "Less than 1.3M"
fi
else
echo "Not yet M...."
fi
或
使用bc
计算浮点数...
# /bin/bash
mk="p"
km="p"
sm="1.4"
ms="1.3"
if [ $(echo "$mk == $km" | bc) ]
then
if [ $(echo "$sm > $ms" | bc) ]
then
echo "Greater than 1.3M"
else
echo "Less than 1.3M"
fi
else
echo "Not yet M...."
fi
这里还有一件事要注意,正如您从我的代码中看到的那样,我已经用数据准备了新变量,而不是在布尔运算和比较运算中使用原始字母和数字,这可以真正意想不到的结果。此外,虽然它们可能在某些条件下工作,但暂时,bash 更喜欢所有变量名都是小写的。如果您有任何问题,请告诉我。但是,我已经测试了两个代码块,它们都可以正常工作。
我是 bash 脚本的新手。我的代码是:
MK=M
SM=1.4
if [[ $MK == "M" ]]
then
if [ $SM -gt 1.3 ]
then
echo "Greater than 1.3M"
else
echo "Less than 1.3M"
fi
else
echo "Not yet M...."
fi
回复:
/tmp/tmp.sh: line 6: [: 1.4: integer expression expected
Less than 1.3M
我做错了什么?
man bash
是这样说的:
arg1 OP arg2
... Arg1 and arg2 may be positive or negative integers.
您似乎在尝试比较浮点数。
归根结底是因为 bash 对浮点数不是很有耐心。在这里用非常简单的术语来说,我建议您做以下两件事之一:
您似乎在尝试确定某些内容是否大于 1.3 Mb,是否正确?如果是这种情况,请保留所有内容,只需将 Kb 用于
$sm
和比较像这样:
#/bin/bash mk="p" km="p" sm="1400" ms="1300" if [[ $mk == $km ]] then if [ $sm > $ms ] then echo "Greater than 1.3M" else echo "Less than 1.3M" fi else echo "Not yet M...." fi
或
使用
bc
计算浮点数...# /bin/bash mk="p" km="p" sm="1.4" ms="1.3" if [ $(echo "$mk == $km" | bc) ] then if [ $(echo "$sm > $ms" | bc) ] then echo "Greater than 1.3M" else echo "Less than 1.3M" fi else echo "Not yet M...." fi
这里还有一件事要注意,正如您从我的代码中看到的那样,我已经用数据准备了新变量,而不是在布尔运算和比较运算中使用原始字母和数字,这可以真正意想不到的结果。此外,虽然它们可能在某些条件下工作,但暂时,bash 更喜欢所有变量名都是小写的。如果您有任何问题,请告诉我。但是,我已经测试了两个代码块,它们都可以正常工作。