循环(?)if语句

时间:2012-11-18 02:16:38

标签: bash shell unix

我是shell脚本的小伙子,我对此感到疑惑:

#!/usr/local/bin/bash
number=5
echo "Enter 'yes' to continue, 'no' to abort:"
read choice
if [ $choice = yes ]; then
        while [ $number -lt 10 ]; do
                echo "The script is now looping!"
        done
elif [ $choice = no ]; then
        echo "Loop aborted"
else
        echo "Please say 'yes' or 'no'"
        read choice
# What now?
fi

如果你没有指定“是”或“否”,我将如何重新检查你的$选择的if语句(第13行)?

谢谢。

2 个答案:

答案 0 :(得分:2)

  1. 您可以将代码从“echo Enter ...”放到外部“while”循环中的fi。 while循环将循环,直到$ choice为“yes”或“no”。这样做时删除最后一个“else”子句(这将是多余的)。

  2. P.S。你需要在内部while循环中增加(或改变)$ number。否则,它将无限运行。

答案 1 :(得分:2)

您可以跟踪是否循环一个名为invalid_choice

的变量
invalid_choice=true
while $invalid_choice; do
    read choice
    if [ "$choice" = "yes" ]; then
        invalid_choice=false
        ...
    elif [ "$choice" = "no" ]; then
        invalid_choice=false
        ...
    else
        echo "Please say yes or no"
done

如果你需要做很多事情,你可以将它概括为一个函数:

function confirm() {
    local ACTION="$1"
    read -p "$ACTION (y/n)? " -n 1 -r -t 10 REPLY
    echo ""
    case "$REPLY" in
        y|Y ) return 0 ;;
        *   ) return 1 ;;
    esac
}

confirm "Do something dangerous" || exit