4

私はシェルスクリプトの初心者で、これについて疑問に思っています。

#!/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

「yes」または「no」を指定しない場合、$ choice(13行目)を再チェックするifステートメントをどのように処理しますか?

ありがとうございました。

4

2 に答える 2

2
  1. 「echoEnter...」からfiまでのコードを外側の「while」ループに入れることができます。whileループは、$choiceが「yes」または「no」になるまでループします。これを実行している間、最後の「else」句を削除します(冗長になります)。

  2. PS内部のwhileループで$numberをインクリメント(または変更)する必要があります。それ以外の場合は、無限に実行されます。

于 2012-11-18T02:21:17.963 に答える
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
于 2012-11-18T02:22:55.557 に答える