我正在尝试在大多数语言中编写看似简单的if语句,但是在bash中这似乎根本不起作用。
当我运行脚本时,它总是输入第一个if语句。任何人都可以帮我解决我的错误吗?
PERC=.5
if [ "$PERC" > "1.00" ]
then
echo "Entered first statement"
else
if [ "$PERC" < "1.00" ]
then
echo "Entered second statement"
fi
fi
感谢您的帮助。
答案 0 :(得分:2)
>
和<
比较字符串,而不是数字(必须在单[...]
中进行反斜杠或引用)。使用-gt
,-lt
等来比较数字,或使用算术条件:
if (( a < b || b <= c )) ; then
但请注意,bash只处理整数算术。要比较浮点数,您可以使用bc
:
if [[ 1 == $( bc <<< '1.5 < 1.00' ) ]] ; then
答案 1 :(得分:2)
>
和<
是I / O重定向运算符。所以
if [ "$PERC" > "1.0" ]
正在执行命令[ "$PERC ]
,将输出重定向到文件1.0
,然后if
正在测试命令是否成功。 [ "$PERC" ]
只是测试"$PERC"
是否为非空字符串。
要在test
命令中将它们用作运算符,您需要引用或转义它们:
if [ "$PERC" '>' "1.0" ]
您还可以使用bash的[[
条件语法而不是[
命令:
if [[ $PERC > "1.0" ]]