如何在bash中“打破”if循环?

时间:2014-01-09 03:12:50

标签: bash shell

当我在bash的if循环中使用break时,它告诉我它对bash无效,我可以使用什么呢?

用例是,用户被问到一个问题,如果他回答'否',脚本应跳到下一部分。

if [[ $ans1_1 = "y" ]]; then
    fedoraDeps
elif [[ $ans1_1 = "n" ]]; then
    break
else
    echo "Answer 'y' or 'n' "
fi

4 个答案:

答案 0 :(得分:11)

if语句不是“循环”,所以突破它们是没有意义的。如果你想让你的一个块成为无操作,你可以使用内置的:命令,它什么都不做:

if [[ $ans1_1 = y ]]; then
    fedoraDeps
elif [[ $ans1_1 = n ]]; then
    :
else
    echo "Answer 'y' or 'n'"
fi

答案 1 :(得分:3)

对于这个例子,我认为使用case更有意义。

case $ans1_1 in
    y)fedoraDeps;;
    n);;
    *) echo "Answer 'y' or 'n'";;
esac

来自man bash

  

如果;;使用运算符,在第一个模式匹配后不会尝试后续匹配。

答案 2 :(得分:0)

这听起来像select命令的理想情况:

PS3="Please make a selection   >"
select foo in 'y' 'n'; do
    case $foo in
        'Y')
            fedoraDeps
            ;;
        'y')
            fedoraDeps
            ;;
        'n')
            break
            ;;
     esac
done

答案 3 :(得分:0)

我同意这种情况可能是最好的。但你应该以任何方式投射到大/小写。对于你的方式:

if [[ ${ans1_1,,} = "y" ]]; then
   fedoraDeps
elif [[ ${ans1_1,,} = "n" ]]; then
   :
else
   echo "Answer 'y' or 'n' "
fi

或者,如果你想要大写的$ {ans1_1 ^^}