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