Yes/No を確認する

よく「このまま実行していいですか? (y/N)」みたいな確認をみかけます。それの実装です。
大文字小文字関係なく y, yes, n, no のいずれか以外であれば再び入力を求め、空欄のままであればデフォルト値を採用します。

第一引数にメッセージ。第二引数は省略されたらデフォルト値を No にし、何かあれば Yes にします。

#!/bin/sh

# /home/naoki/bin/confirm.sh

if [ -z "${2}" ]; then
  default_value="no"
  message="${1} (y/N) "
else
  default_value="yes"
  message="${1} (Y/n) "
fi

while : ; do
  echo -n "${message}"
  read answer
  if [ -z "${answer}" ]; then
    answer="${default_value}"
  fi
  if [[ ${answer} =~ ^\s*[yY]([eE][sS])?\s*$ ]]; then
    exit 0
  elif [[ ${answer} =~ ^\s*[nN][oO]?\s*$ ]]; then
    exit 1
  fi
done
# タイプミスしたらもう一度たずねる
$ ~/bin/confirm.sh "delete files?"
delete files? (y/N) yed
delete files? (y/N) yes

$ echo $?
0

# 空欄のまま Enter を押すとデフォルト値を採用
$ ~/bin/confirm.sh "delete files?"
delete files? (y/N)

$ echo $?
1

# デフォルト値を Yes にする
$ ~/bin/confirm.sh "delete files?" 1
delete files? (Y/n)

$ echo $?
0

このスクリプトを利用して、削除するとき、まとめて訊ねるを作成。