Bash:为什么我的If-Statement总是评估为true?

时间:2015-09-11 10:34:21

标签: linux bash if-statement

我正在尝试在大多数语言中编写看似简单的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

感谢您的帮助。

2 个答案:

答案 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" ]]