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
このスクリプトを利用して、削除するとき、まとめて訊ねるを作成。