シェルスクリプトで [y/n] を入力させて処理を分岐する方法

Linuxテクニック

シェルスクリプトを書いていると、ユーザーの入力に応じて処理を分岐させたくなることがあります。
このページでは、シェルスクリプトで「[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

実行すると、以下のようになります。

Linuxテクニック
\シェアお願いします/
LFI

コメント

タイトルとURLをコピーしました