A、B、Y、いいえなどの応答が必要な一連のユーザーエントリを確認する必要があります。入力した値が許可された応答セットと一致することを確認したいと思います。それぞれの要件に応じて、各検証を実行する関数を作成します。機能がうまくいくようですが、応答がうまくいけばメインループから出ることはできません。
#!/usr/bin/bash
function valcheck()
{
while true;
do
if [[ "$response" =~ [$1] ]]
then
echo "Acceptible response"
return 0
else
echo "Invalid response!"
continue
fi
done
}
#call function
printf "What is the response [A/P]: "
while true; do
read -r response
valcheck "AaPp"
done
答え1
2つのループを持つ必要はありませんwhile
。さらに、私はwhile true
ループが好きではありません。ユーザー入力の読み取りと検証を単一の関数に減らすことができます。
#!/usr/bin/bash
valcheck() {
while
printf '%s' "$2"
read -r response
do
if
[[ "$response" =~ ^[$1]$ ]]
then
echo "Acceptable response!"
break
else
echo "Invalid response!"
fi
done
}
valcheck "AaPp" "What is the response [A/P]: "
答え2
あなたが探しているコマンドの言葉は、サブルーチンが成功を返したときにループを終了することですbreak
:while true
valcheck "AaPp" && break
参考までに、printf
プロンプトコマンドをループ内に移動できます。回答が「a」または「p」でない場合は、ユーザーが希望する回答を再度尋ねることをお勧めします。