Bash不显示嵌套的if-else语句的结果

时间:2019-08-23 21:16:35

标签: bash if-statement nested

我正在尝试嵌套几个if / else语句。也许我犯了一个非常愚蠢的错误,但我无法使其正常工作。顺序有3个变量,其中一个随机为“ -1”。

如果其中之一为“ -1”,则随后的所有值也均为“ -1”,因此,如果FOO2为“ -1”,则FOO3也为。

每当变量为“ -1”时,我都需要打印到控制台,优先处理第一个变量,因此最后一个示例应仅打印“ FOO2 is -1”,而没有其他内容。

这应该显示“ FOO3是-1”,但不会。

FOO1="2"
FOO2="2"
FOO3="-1"

if [ ${FOO1} -eq "-1" ]
then
    if [ ${FOO2} -eq "-1" ]
    then
        if [ ${FOO3} -eq "-1" ]
        then
            echo "FOO3 is -1"
        else 
            echo "FOO2 is -1"
        fi
    else 
        echo "FOO1 is -1"
    fi
fi

1 个答案:

答案 0 :(得分:2)

您的第一个测试是错误的,并且没有{Interval(0.0, 0.1, closed='right'): 0.044511160008147525, Interval(0.1, 0.2, closed='right'): 0.15604870269444393, Interval(0.2, 0.3, closed='right'): 0.2622453825250092, Interval(0.3, 0.4, closed='right'): 0.35781166427200817, Interval(0.4, 0.5, closed='right'): 0.4520571189836645, Interval(0.5, 0.6, closed='right'): 0.5516216469609114, Interval(0.6, 0.7, closed='right'): 0.6487768161741378, Interval(0.7, 0.8, closed='right'): 0.7640266198159613, Interval(0.8, 0.9, closed='right'): 0.8468250462224601, Interval(0.9, 1.0, closed='right'): 0.9633520862829202}` 子句,因此除了第一个测试之外,没有其他东西可以运行。

此逻辑的精简版本可能更像:

else

...或者,如果出于某些原因您确实想保留嵌套:

FOO1="2"
FOO2="2"
FOO3="-1"

if [ "${FOO1}" -eq -1 ]; then
    echo "FOO1 is -1"
elif [ "${FOO2}" -eq -1 ]; then
    echo "FOO2 is -1"
elif [ "${FOO3}" -eq -1 ]; then
    echo "FOO3 is -1"
fi