簡単な対話型データ入力(3)

 main.sh の中で日付設定が終わった後、取得されたシェル変数をexport して edit_id.sh が実行されます。

 前半はシェル変数の引継ぎに成功しているか確認しています。IDの入力シーケンスでは再び while ループの登場です。

 IDを入力します。そのIDがデータベース${DB}のテーブル${table}に登録されていれば、そのレコードのchフィールドを表示し、思っているものと一致するか確認を促します。yまたはYが入力され、入力したIDが所望のものである確認がとれれば insert_db.sh を実行してループの最初に戻ります。一方、タイプミスなどの理由から所望のIDでなかった場合はnまたはNが入力されますので何もせずにループの最初に戻ります。一方、yでもnでもなかった場合は、確認のループを再度実行して、y or n を聞いてきます。

 一方、入力したIDがデータベースに登録されていなかった場合、else分岐に移りますから、e または E という文字であった場合、whileループを抜けてスクリプトを終了して main.sh へ戻ります。タイプミスなどの理由から、IDがそれ以外の文字であった場合はループの最初に戻って、再びIDの入力を促します。

#! /bin/bash
# シェル変数の引継ぎ確認
error_num=0
for var in date keyword input_date
do
 if [ -z ${!var} ]
  then
   printf "[%s] 関数 %s の変数 ${var} に値がありません\n" \
    "`date +"%F %T"`" `basename $0`
   error_num=`expr ${error_num} + 1`
 fi
done
printf "[%s] 関数 %s のエラーは%d回です\n" \
    "`date +"%F %T"`" `basename $0` ${error_num}
if [ ${error_num} -ne 0 ]; then exit; fi

# IDの入力シーケンス
while :
do
  nonewline "IDを入力して下さい(終了はe) "
  read ID
  ch=`mysql -N -h ${host} ${DB} << _SQL_
   select ch from ${table} where id="${ID}";
_SQL_`
  if [ ! -z ${ch} ]
  then
   printf "%s\n" ${ch}
   while :
   do
   nonewline "これでいいですか?[y/n] "
   read RESP
   char=`echo $RESP | cut -c1`
   case $char in
    y|Y)
        export id=${ID}
        ./insert_db.sh
        break
        ;;
    n|N) break;;
    ?)  ;;
   esac
   done
  else
    case ${ID} in
      e|E) break;;
      ?) ;;
    esac
  fi
done