この単純なwhileループスクリプトにこれをどのように追加しますか?

この単純なwhileループスクリプトにこれをどのように追加しますか?

「いいえ、もう一度お試しください」をエコーする簡単なスクリプトがあります。ユーザーが「赤」以外の項目を入力した場合は、依頼を続けます。ユーザーが「red」と入力して停止した場合は、「正しい!」をエコーするようにスクリプトにどのように追加しますか?

echo -n "What is my favorite color?  "
read favorite
while [ "$favorite" != "red" ]; do
echo "Nope, try again."; read favorite
done

答え1

ユーザーが文字列を入力したら、ループがどのように終わるかを確認してくださいred。つまり、ループが終わると$favoriteループがありますred(またはユーザーが押すとCtrl+D$favoriteになります)。

したがって、コードに適用できる最も簡単な変更(ユーザーがループを終了するために使用できることを無視するCtrl+D)は、スクリプトの最後に文字列を出力することです。

#!/bin/sh

printf 'What is my favorite color? ' >&2
read favorite
while [ "$favorite" != "red" ]; do
echo "Nope, try again."; read favorite
done

echo "That's right!"

また、echo -nこれをキャンセルし、printf標準エラー(たとえば、プロンプトを印刷する必要がある)をさらに印刷するより標準的な呼び出しに置き換えました。を使用すると、ユーザーに質問を投げ、色を一度に読むことがbashできます。read -p 'Enter color: ' color

問題を正しく解決するには、一般的な方法で入力検証ループを実行します。

#!/bin/sh

while true; do
    printf 'Enter color: ' >&2
    read color

    if [ "$color" = "red" ]; then
        break
    fi

    echo 'Nope, try again'
done

echo "That's correct!"

ループは無限大で、ステートメントでのみ終了しますbreak。これにより、ユーザーがループから外れるのを防ぎ、Ctrl+D正しい入力を入力する必要があります。入場後間違った入力中にユーザーに色を入力するように求められます。

$colorこれはループの後red

答え2

ロジックをwhileループに入れる必要があります。

while true; do
  echo -n "What is my favorite color?  "
  read favorite
  if [[ $favorite == "red" ]]; then
     echo "That's Right"
     exit 0
  fi
  echo "No, try again."
done

関連情報