シェルスクリプトを書いていると、ユーザーの入力に応じて処理を分岐させたくなることがあります。
このページでは、シェルスクリプトで「[y/n]」を表示してユーザーの入力を待ち、入力された文字によって処理を分岐させる方法を紹介します。
以下は、「[Y/n]」(Yが大文字)を出力して「デフォルトをYes」とする例です。何も入力せずにEnterを押した場合、および「y」もしくは「Y」で始まる単語を入力してEnterを押した場合は「Yes」を出力し、それ以外の場合は「No」を出力します。
#!/bin/bash
echo -n "よろしいですか? [Y/n]: "
read ANS
case $ANS in
"" | [Yy]* )
# ここに「Yes」の時の処理を書く
echo "Yes"
;;
* )
# ここに「No」の時の処理を書く
echo "No"
;;
esac
以下は、「[y/N]」(Nが大文字)を出力して「デフォルトをNo」とする例です。「y」もしくは「Y」で始まる単語を入力してEnterを押した場合のみ「Yes」を出力し、それ以外の文字を入力してEnterを押した場合、および何も入力せずにEnterを押した場合は「No」を出力します。
#!/bin/bash
echo -n "よろしいですか? [y/N]: "
read ANS
case $ANS in
[Yy]* )
# ここに「Yes」の時の処理を書く
echo "Yes"
;;
* )
# ここに「No」の時の処理を書く
echo "No"
;;
esac
さらに、以下はユーザーが明確に「y」または「n」を入力するまで再入力を求める例です。
#!/bin/bash
function ask_yes_no {
while true; do
echo -n "$* [y/n]: "
read ANS
case $ANS in
[Yy]*)
return 0
;;
[Nn]*)
return 1
;;
*)
echo "yまたはnを入力してください"
;;
esac
done
}
if ask_yes_no "よろしいですか?"; then
# ここに「Yes」の時の処理を書く
echo "Yes"
else
# ここに「No」の時の処理を書く
echo "No"
fi
実行すると、以下のようになります。
コメント