応答要求のスタイルを定型化した関数
関数名: Question
書式: Question 質問文 デフォルト値 ヘルプメッセージ
目的: 指定したメッセージを標準出力に書き出し、ユーザに応答を要求する
Question() { if [ $# -lt 3 ]; then echo "Usage: Question question default helpmessage" 1>&2 exit 1 fi ANSWER= _DEFAULT=$2 _QUESTION= _HELPMSG=$3 if [ "$_DEFAULT" = "" ]; then _QUESTION="$1? " else _QUESTION="$1 [$_DEFAULT]? " fi while :; do if [ "`echo -n`" = "-n" ]; then # echo -n "$_QUESTION\c" else echo -n "$_QUESTION" fi read ANSWER case `echo "$ANSWER" | tr [A-Z] [a-z]` in #応答がなかった場合はデフォルト値を設定する "" ) if [ "$_DEFAULT" != "" ]; then ANSWER=$_DEFAULT break fi ;; yes | y ) ANSWER=yes break ;; no | n ) ANSWER=no break ;; quit | q ) exit 1 ;; #シェルのデバッグオプションを使用 +x | -x ) set $ANSWER ;; #コマンドの実行 !* ) eval `expr "$ANSWER" : "!\(.*\)"` ;; "?" ) echo "" if [ "$_HELPMSG" = "" ]; then echo "No help available." else echo "$_HELPMSG" fi echo "" ;; * ) break ;; esac done }