「いいえ、もう一度お試しください」をエコーする簡単なスクリプトがあります。ユーザーが「赤」以外の項目を入力した場合は、依頼を続けます。ユーザーが「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