#大家在写shell的时候可能很多情况下要用到日志功能,现在给大家共享一本专用于写日志的shell程序。
#使用简单方便,格式可控
#实用于Ksh和Bash
#由于当初是为日本项目而写,所以注释都是日文
#需要使用者可联系我
#!/bin/sh
##--------------------------------------------------------------------------------------------------
## ファイル名 : FUNCLIB.sh
## プログラム名 : 共通関数ライブラリ
##
## 概要説明 : 共通の機能として、別のシェルスクリプトが呼ぶ関数ライブラリです。
##
## 実行方法 : . FUNCLIB.sh
##
## バージョン : 1.0.0
## 作成者 : GDC XX
## 作成年月日 : 2009/04/07
##
## 更新者 : コ
## 最終更新日 : 2009/04/15
##--------------------------------------------------------------------------------------------------
##
##--------------------------------------------------------------------------------------------------
## 更新履歴
## GDC XX 2009/04/07 1.0.0 初版
## GDC コ 2009/04/15 1.1.0
## Pro_tbl_acnt()、Set_Flag()、Delete_File()三つの関数を追加
##
##
##--------------------------------------------------------------------------------------------------
##
##
##
##
#---------------------------------------------------------------------------------------------------
#Function : Init()
#Description : この関数の役割は、FUNCLIB.shに使用した全局変数をセットする。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Init()
{
export LOG_L='+----------------------------------------------------------------------+'
export LOG_STRING CURRENT_DATE CURRENT_TIME FILE_LG OUT_DIR_LOG
}
#---------------------------------------------------------------------------------------------------
#Function : Get_Date()
#Description : この関数の役割は、現行の期日をリターンする。
# : 期日格式:%Y/%m/%d %H:%M:%S
#Input Parameters: 無し
#Returns : CURRENT_DATE
#---------------------------------------------------------------------------------------------------
Get_Date()
{
CURRENT_DATE=`date +'%Y/%m/%d %H:%M:%S'`
# return echo $CURRENT_DATE
}
#---------------------------------------------------------------------------------------------------
#Function : Get_Time()
#Description : この関数の役割は、現行の時刻をリターンする。
# : 時刻格式:%H:%M:%S
#Input Parameters: 無し
#Returns : CURRENT_TIME
#---------------------------------------------------------------------------------------------------
Get_Time()
{
CURRENT_TIME=`date +'%H:%M:%S'`
}
#---------------------------------------------------------------------------------------------------
#Function : Start_Log()
#Description : この関数の役割は、ログファイルのタイトル情報を出力する。
# 使用した前に、二つ環境変数LOG_FILEおよびOUT_DIRを指定することが必要、
# 指定しない場合、下記のデフォルト値を使用する。
#Input Parameters:
# $1 = OUT_DIR デフォルト値:現行ディレクトリ
# $2 = LOG_FILE デフォルト値:log.log
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Start_Log()
{
Init
# if [ ! -n "$OUT_DIR" ] ; then
# OUT_DIR_LOG=`pwd`
# OUT_DIR_LOG="$OUT_DIR_LOG/log"
# else
# OUT_DIR_LOG="$OUT_DIR/log"
# fi
if [ ! -n "$OUT_DIR_LOG" ] ; then
export OUT_DIR_LOG=`pwd`
OUT_DIR_LOG="$OUT_DIR_LOG/log"
else
# DIR_LEN=`echo ${#OUT_DIR_LOG}`
typeset -i DIR_LEN=`expr length $OUT_DIR_LOG`
typeset -i DIR_LEN_1=`expr $DIR_LEN - 1`
# CHAR=`echo ${OUT_DIR_LOG:$DIR_LEN_1:1}`
CHAR=`expr substr $OUT_DIR_LOG $DIR_LEN_1 1`
if [ "$CHAR" = "/" ] ; then
# OUT_DIR_LOG=`echo ${OUT_DIR_LOG:0:$DIR_LEN_1}`
OUT_DIR_LOG=`expr substr $OUT_DIR_LOG 1 $DIR_LEN_1`
fi
fi
if [ ! -d "$OUT_DIR_LOG" ] ; then
mkdir -p -m 777 "$OUT_DIR_LOG"
fi
CURRENT_T=`date +'%Y%m%d%H%M%S'`
# if [ ! -n "$LOG_FILE" ] ; then
# unset $LOG_FILE
LOG_FILE="log_$CURRENT_T.log"
# fi
FILE_LG="$OUT_DIR_LOG/$LOG_FILE"
if [ ! -f "$FILE_LG" ] ; then
touch "$FILE_LG"
fi
printf "$LOG_L/n" >> $FILE_LG
Get_Date
Current_user=`whoami`
printf "**Current Time** $CURRENT_DATE/n**Current User** $Current_user/n" >> $FILE_LG
printf "$LOG_L/n/n" >> $FILE_LG
}
#---------------------------------------------------------------------------------------------------
#Function : End_Log()
#Description : この関数の役割は、ログファイルの結末情報を出力する。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
End_Log()
{
LOG_MSG="**Normal ended**"
typeset -i PAR_NUM=$#
if [ $PAR_NUM = 0 ] ; then
LOG_MSG="$LOG_MSG/n"
else
if [ $1 = 0 -o $1 = "NORMAL" -o $1 = "normal" ] ; then
LOG_MSG="$LOG_MSG/n"
else
LOG_MSG="**Error ended**/n"
fi
fi
printf "Log file:$FILE_LG/n"
Get_Date
TEMP="**Current Time**"
printf "/n$LOG_L/n$LOG_MSG$TEMP$CURRENT_DATE/n$LOG_L/n" >> "$FILE_LG"
}
#---------------------------------------------------------------------------------------------------
#Function : Write_Log()
#Description : この関数の役割は、蓄積したログメッセージをファイルに出力する。
#
#Input Parameters:
# $1=LOG_STRING 蓄積したログメッセージ、全局変数だ。
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Write_Log()
{
printf "$LOG_STRING" >> "$FILE_LG"
LOG_STRING=""
}
#---------------------------------------------------------------------------------------------------
#Function : Display_Log()
#Description : この関数の役割は、ユーザーが必要な時蓄積したログメッセージをファイルに出力する。
#
#Input Parameters:
# $1=LOG_STRING 蓄積したログメッセージ、全局変数だ。
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Display_Log()
{
if [ "$LOG_STRING" = "" ] ; then
return
else
Write_Log
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Set_Program_Sta_Log()
#Description : この関数の使い方は、各機能を実行する前に使用する。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Set_Program_Sta_Log()
{
typeset -i PAR_LEN=$#
Get_Time
if [ $PAR_LEN = 0 ] ; then
LOG_STRING="$LOG_L/n$CURRENT_TIME Starting....../n"
else
LOG_STRING="$LOG_L/n$CURRENT_TIME $1....../n"
fi
Write_Log
}
#---------------------------------------------------------------------------------------------------
#Function : Set_Program_End_Log()
#Description : この関数の使い方は、各機能を実行終了した後で使用する。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Set_Program_End_Log()
{
typeset -i PAR_LEN=$#
Get_Time
if [ $PAR_LEN = 0 ] ; then
LOG_STRING="$CURRENT_TIME Ended....../n$LOG_L/n"
else
LOG_STRING="$CURRENT_TIME $1....../n$LOG_L/n"
fi
Write_Log
}
#---------------------------------------------------------------------------------------------------
#Function : Msg_Process()
#Description : この関数は、本機能内で使用のみ、セットされるログメッセージを既定様式によって、
# 蓄積する。
#
#Input Parameters:
# $1=LOG_STRING 蓄積したログメッセージ、全局変数だ
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Msg_Process()
{
typeset -i LINE_NUM=800
# LINE_NUM=800
# typeset -i STR_NUM=`echo ${#1}`
typeset -i STR_NUM=`expr "$1" : ".*"`
if [ $STR_NUM -gt $LINE_NUM ] ; then
typeset -i i=1
STR_NUM=`expr $STR_NUM + $LINE_NUM`
typeset -i NUM=`expr $STR_NUM / $LINE_NUM`
while [ $i -le $NUM ]
do
if [ $i -eq 1 ] ; then
MSG_STRING=`expr substr "$1" 1 $LINE_NUM`
LOG_STRING="$LOG_STRING$MSG_STRING/n"
else
typeset -i j=`expr $i - 2`
typeset -i STEP_NUM=`expr $LINE_NUM - 9`
typeset -i k=`expr $j /* $STEP_NUM`
typeset -i STA_NUM=`expr $LINE_NUM + $k`
STR_NUM=`expr $STR_NUM + 1`
typeset -i CHA_COUNT=`expr $STA_NUM + $STEP_NUM`
if [ $CHA_COUNT -ge $STR_NUM ] ; then
STEP_NUM=`expr $STR_NUM - $STA_NUM`
STEP_NUM=`expr $STEP_NUM - 1`
# SUB_STR=`echo ${1:$STA_NUM:$STEP_NUM}`
SUB_STR=`expr substr "$1" $STA_NUM $STEP_NUM`
LOG_STRING="$LOG_STRING $SUB_STR/n"
else
# SUB_STR=`echo ${1:$STA_NUM:$STEP_NUM}`
SUB_STR=`expr substr "$1" $STA_NUM $STEP_NUM`
LOG_STRING="$LOG_STRING $SUB_STR/n"
fi
fi
i=`expr $i + 1`
done
else
LOG_STRING="$LOG_STRING $1 /n"
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Line_Break()
#Description : この関数は、本機能内で使用のみ、もしセットされるログメッセージにline breakが
# あれば、処理する。
#
#Input Parameters:
# $1=LOG_STRING 蓄積したログメッセージ、全局変数だ
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Line_Break()
{
S=$1
if [ "$S" = "" ] ; then
return
fi
typeset -i LEN=0
# LEN=0
while [ 1 ]
do
# typeset -i LEN=`echo ${#S}`
# typeset -i LEN=`expr length $S`
typeset -i LEN=`expr "$S" : ".*"`
typeset -i LEN_1=`expr $LEN - 1`
typeset -i LEN_2=`expr $LEN - 2`
# LB_S=`echo ${S:$LEN_2:$LEN}`
LB_S=`expr substr "$S" $LEN_1 2`
if [ "$LB_S" = "/n" ] ; then
# S=`echo ${S:0:$LEN_2}`
S=`expr substr "$S" 1 $LEN_2`
else
break
fi
done
typeset -i count=0
# count=0
S_SUB=$S
# FLAG_1=1
# FLAG_2=1
typeset -i FLAG_1=1
typeset -i FLAG_2=1
while [ 1 ]
do
# SUB_LEN=`echo ${#S_SUB}`
# typeset -i SUB_LEN=`expr length $S_SUB`
typeset -i SUB_LEN=`expr "$S_SUB" : ".*"`
# for i in `seq $SUB_LEN`
typeset -i i=1
while [ $i -le $SUB_LEN ]
do
typeset -i i_2=`expr $i + 2`
# CHAR=`echo ${S_SUB:$i:2}`
CHAR=`expr substr "$S_SUB" $i 2`
if [ "$CHAR" = "/n" ] ; then
typeset -i FLAG_2=2
# FLAG_2=2
typeset -i j=`expr $i - 1`
# MSG=`echo ${S_SUB:0:$i}`
MSG=`expr substr "$S_SUB" 1 $j`
if [ $FLAG_1 = 1 ] ; then
Msg_Process "$MSG"
typeset -i FLAG_1=2
# FLAG_1=2
else
MSG=" $MSG"
Msg_Process "$MSG"
fi
typeset -i k=`expr $i + 1`
typeset -i end=`expr $SUB_LEN - $k`
typeset -i NEXT_STA=`expr $i + 2`
# S_SUB=`echo ${S_SUB:$NEXT_STA:$end}`
S_SUB=`expr substr "$S_SUB" $NEXT_STA $end`
typeset -i count=`expr $count + 2`
break 1
else
typeset -i count=`expr $count + 1`
if [ $count -ge $LEN ] ; then
if [ $FLAG_2 = 1 ] ; then
Msg_Process "$S_SUB"
else
Msg_Process " $S_SUB"
fi
break 2
fi
fi
i=`expr $i + 1`
done
done
}
#---------------------------------------------------------------------------------------------------
#Function : Msg_Accumulation()
#Description : この関数は、本機能内で使用のみ、セットされるログメッセージを蓄積する。
#
#Input Parameters:
# $1=LOG_STRING 蓄積用ログメッセージ、全局変数だ
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Msg_Accumulation()
{
if [ "$1" = "" ] ; then
return
else
Get_Time
LOG_STRING="$LOG_STRING$CURRENT_TIME "
Line_Break "$1"
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Msg_Accumulation()
#Description : この関数は、セットされるログメッセージを標準輸出に出力する。
# ユーザー使用もいいです。
#
#Input Parameters:
# $1=LOG_STRING 蓄積用ログメッセージ、全局変数だ
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Set_Terminal()
{
typeset -i PAR_N=$#
if [ $PAR_N = 0 ] ; then
return
else
S=$1
if [ "$S" = "" ] ; then
return
fi
Get_Time
TER_MSG="$CURRENT_TIME:$1/n"
printf "$TER_MSG"
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Set_Log()
#Description : この関数は、セットされるログメッセージを標準輸出に出力する。
# ユーザー使用もいいです。
#
#Input Parameters:
# $1=LOG_STRING 蓄積用ログメッセージ、全局変数だ
# $2=OUTPUT_FLAG Y or N
# Yの場合は、ターミナルとログファイルに出力する。
# Nの場合は、ログファイルに出力のみです。
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Set_Log()
{
typeset -i PAR_NUM=$#
Msg="[Msg:]$1"
if [ $PAR_NUM -eq 0 ] ; then
return
elif [ $PAR_NUM -eq 1 ] ; then
Msg_Accumulation "$Msg"
elif [ $PAR_NUM -eq 2 ] ; then
if [ "$2" = "Y" ] ; then
Msg_Accumulation "$Msg"
Set_Terminal "$Msg"
else
Msg_Accumulation "$Msg"
fi
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Create_Dir()
#Description : この関数は、ユーザー指定したディレクトリを作成する。指定したディレクトリは
# もう存在すれば、作成しないこと。
#
#Input Parameters:
# $1=DIR ユーザー指定したディレクトリ
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Create_Dir()
{
DIR=$1
if [ "$DIR" = "" ] ; then
return
else
# DIR_LEN=`echo ${#DIR}`
typeset -i DIR_LEN=`expr length $DIR`
# CHAR=`echo ${DIR:$DIR_LEN:1}`
CHAR=`expr substr $DIR $DIR_LEN 1`
if [ "$CHAR" = "/" ] ; then
typeset -i DIR_LEN_1=`expr $DIR_LEN - 1`
# DIR=`echo ${DIR:1:$DIR_LEN_1}`
DIR=`expr substr $DIR 1 $DIR_LEN_1`
fi
if [ ! -d "$DIR" ] ; then
mkdir -p -m 777 "$DIR"
fi
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Create_File()
#Description : この関数は、ユーザー指定したディレクトリファイル名を作成する。指定した
# ディレクトリにファイルがもう存在すれば、作成しないこと。
#
#Input Parameters:
# $1=DIR ユーザー指定したディレクトリ
# $1=FILE_NAME ユーザー指定したファイル名
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Create_File()
{
typeset -i PAR_NUM=$#
if [ $PAR_NUM = 2 ] ; then
if [ "$1" = "" -o "$1" = "" ] ; then
return
else
DIR=$1
FILE_N=$2
# DIR_LEN=`echo ${#DIR}`
typeset -i DIR_LEN=`expr length $DIR`
# CHAR=`echo ${DIR:$DIR_LEN:1}`
CHAR=`expr substr $DIR $DIR_LEN 1`
if [ "$CHAR" != "/" ] ; then
DIR="$1/"
fi
# CHAR=`echo ${FILE_N:1:1}`
CHAR=`expr substr $FILE_N 1 1`
if [ "$CHAR" = "/" ] ; then
DIR="$1/"
# FILE_N_LEN=`echo ${#FILE_N}`
typeset -i FILE_N_LEN=`expr length $FILE_N - 1`
# FILE_N=`echo ${FILE_N:2:$FILE_N_LEN}`
FILE_N=`expr substr "$FILE_N" 2 $FILE_N_LEN`
fi
FILE="$DIR$FILE_N"
if [ ! -f "$FILE" ] ; then
touch "$FILE"
fi
fi
else
echo "your dirctory or filename invalid."
return
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Create_Sqlfile()
#Description : この関数は、ユーザー指定したSQL文によると、SQLスクリプトファイルを作成すること。
#
#Input Parameters:
# $1=SQL_STRING SQL文 必要
# $2=OUTPUT_CSV CSVファイル名とアウトプットディレクトリ 必要
# $3=OUTPUT_COUNT_CSV データ件数
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Create_Sqlfile()
{
SQL_STRING=$1
OUTPUT_CSV=$2
OUTPUT_COUNT_CSV=$3
SQL_SCRIPT="$OUTPUT_DIR/sql_temp.sql"
# DIR_LEN=`echo ${#SQL_STRING}`
typeset -i DIR_LEN=`expr length "$SQL_STRING"`
# typeset -i DIR_LEN_1=`expr $DIR_LEN - 1`
# CHAR=`echo ${SQL_STRING:$DIR_LEN_1:1}`
CHAR=`expr substr "$SQL_STRING" $DIR_LEN 1`
if [ "$CHAR" != ";" ] ; then
SQL_STRING="$SQL_STRING;"
fi
echo "set SERVEROUTPUT OFF;
set FEEDBACK OFF;
set HEADING OFF;
set ECHO OFF;
set PAGES 0
set LINESIZE 0
set COL 0
set TRIMSPOOL ON
spool $OUTPUT_CSV
$SQL_STRING
spool off
" > $SQL_SCRIPT
Process_Sqlfile "$SQL_SCRIPT_N"
}
#---------------------------------------------------------------------------------------------------
#Function : Process_Sqlfile()
#Description : この関数は、Create_Sqlfile関数から、SQLスクリプトファイルを取って、SPOOLでCSV
# ファイルに出力すること。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Process_Sqlfile()
{
if [ ! -f "$FILE_LG" ] ; then
Set_Log "Please check your SQL script file./nyour dirctory or filename invalid." "$Terminal_Flag"
return
fi
SQLBUF=`sqlplus $ORACLE_USER/$ORACLE_PWD << EOF
@$SQL_SCRIPT;
EOF`
Check_Result "$OUTPUT_CSV"
}
#---------------------------------------------------------------------------------------------------
#Function : Check_Result()
#Description : この関数は、Process_Sqlfileで作成したCSVファイルにエラーデータの有無を調査
# すること。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Check_Result()
{
MSG_1='CSV file has not been created.'
MSG_1='CSVファイルが作成されません。'
if [ ! -f "$OUTPUT_CSV" ] ; then
rm -r $SQL_SCRIPT
SQL_ERROR_FLAG="Y"
Set_Log "不明なエラー発生しました。/nログを調べてください。/n$MSG_1" "$Terminal_Flag"
return
fi
typeset -i DATA_COUNT=`cat $OUTPUT_CSV |wc -l`
if [ $DATA_COUNT -gt 0 ] ; then
typeset -i ERROR_COUNT=`cat $OUTPUT_CSV | grep -c "$SQL_ERROR_STR"`
typeset -i ERROR_COUNT_1=`cat $OUTPUT_CSV | grep -c "SP2"`
if [ $ERROR_COUNT -gt 0 ] ; then
STRING=`cat $OUTPUT_CSV | grep "$SQL_ERROR_STR"`
Set_Log "$STRING/n$MSG_1" "$Terminal_Flag"
# rm -r $OUTPUT_CSV
printf "" > $OUTPUT_CSV
rm -r $SQL_SCRIPT
SQL_ERROR_FLAG="Y"
elif [ $ERROR_COUNT_1 -gt 0 ] ; then
STRING=`cat $OUTPUT_CSV | grep "SP2"`
Set_Log "$STRING/n$MSG_1" "$Terminal_Flag"
## rm -r $OUTPUT_CSV
printf "" > $OUTPUT_CSV
rm -r $SQL_SCRIPT
SQL_ERROR_FLAG="Y"
else
rm -r $SQL_SCRIPT
if [ "$OUTPUT_COUNT_CSV" != "" ] ; then
Check_File_Line
fi
SQL_ERROR_FLAG="N"
fi
else
SQL_ERROR_FLAG="D"
rm -r $SQL_SCRIPT
Check_File_Line
# rm -r $OUTPUT_CSV
# Set_Log "Data not found." "$Terminal_Flag"
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Check_File_Line()
#Description : この関数は、CSVファイルを作成した場合、いくつ行目をリターンすること。
#
#Input Parameters:
# $1=DIR ユーザー指定したディレクトリ
# $1=FILE_NAME ユーザー指定したファイル名
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Check_File_Line()
{
typeset -i DATA_LINE=`cat $OUTPUT_CSV |wc -l`
if [ $DATA_LINE -gt 1 ] ; then
Set_Log "$DATA_LINE rows selected." "$Terminal_Flag"
printf "$DATA_LINE" > $OUTPUT_COUNT_CSV
else
Set_Log "$DATA_LINE rows selected./nData not found." "$Terminal_Flag"
printf "0" > $OUTPUT_COUNT_CSV
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Pro_tbl_acnt()
#Description : この関数は、PL/SQLのプログラムを呼び、spoolで処理する。
#
#Input Parameters:
# $1=DIR ユーザー指定したディレクトリ
# $1=FILE_NAME ユーザー指定したファイル名
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Pro_tbl_acnt()
{
if [ ! -f "$FILE_LG" ] ; then
Set_Log "Please check your SQL script file./nyour dirctory or filename invalid." "$Terminal_Flag"
return
fi
ERRORBUF==`sqlplus $ORACLE_USER/$ORACLE_PWD << EOF
set SERVEROUTPUT ON size 1000000;
set FEEDBACK OFF;
set HEADING OFF;
set ECHO OFF;
set PAGES 0
set LINESIZE 0
set COL 0
spool $OUTPUT_CSV
@$SQL_SCRIPT;
spool off
EOF`
grep -v '^SQL>' $OUTPUT_CSV > "$OUTPUT_DIR/rec_count_temp.txt"
cat $OUTPUT_DIR/rec_count_temp.txt > $OUTPUT_CSV
Delete_File "$OUTPUT_DIR/rec_count_temp.txt"
Check_Result "$OUTPUT_CSV"
}
#---------------------------------------------------------------------------------------------------
#Function : Set_Flag()
#Description : この関数は、$2は無し、shellコマンドを実行成功かどかを判断する。
# エラーの場合、logにエラーメッセージを出力。
# $2はCSVの場合、CSVを出力成功かどかを判断する。
#Input Parameters:
# $1=Log_Name Logに出力の内容
# $2=Err_Type CSV
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Set_Flag()
{
Log_Name=$1
Err_Type=$2
if [ -f "err_msg.txt" ] ; then
# エラーメッセジーを取得
ERR_MSG=`cat err_msg.txt`
# エラーの行数を取得
typeset -i ERR_LINE=`cat err_msg.txt | wc -l`
if [ $ERR_LINE -eq 0 ] ; then
if [ "$Err_Type" = "CSV" ] ; then
Set_Log "$Log_Nameを作成終了しました。" "$Terminal_Flag"
else
Set_Log " $Log_Name :
実行することを成功しました。" "$Terminal_Flag"
COMMAND_FLAG="Y"
fi
else
OS_ERR_FLAG="Y"
RETURN_CODE=1
if [ "$Err_Type" = "CSV" ] ; then
Set_Log "$ERR_MSG"
Set_Log "$Log_Nameを作成しませんでした。" "$Terminal_Flag"
else
Set_Log "
$Log_Name :実行することを成功しませんでした。/n
エラーメッセージ: $ERR_MSG " "$Terminal_Flag"
COMMAND_FLAG="N"
fi
fi
else
if [ "$Err_Type" = "CSV" ] ; then
Set_Log "$Log_Nameを作成終了しました。" "$Terminal_Flag"
else
Set_Log " $Log_Name :
実行することを成功します。" "$Terminal_Flag"
COMMAND_FLAG="Y"
fi
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Delete_File()
#Description : この関数は、ファイルを存在の場合、削除する。
#
#Input Parameters:
# $1=File_Name ファイル名
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Delete_File()
{
File_Name=$1
if [ -f "$File_Name" ] ; then
rm -r $File_Name
fi
}
#大家在写shell的时候可能很多情况下要用到日志功能,现在给大家共享一本专用于写日志的shell程序。
#使用简单方便,格式可控
#实用于Ksh和Bash
#由于当初是为日本项目而写,所以注释都是日文
#需要使用者可联系我
#!/bin/sh
##--------------------------------------------------------------------------------------------------
## ファイル名 : FUNCLIB.sh
## プログラム名 : 共通関数ライブラリ
##
## 概要説明 : 共通の機能として、別のシェルスクリプトが呼ぶ関数ライブラリです。
##
## 実行方法 : . FUNCLIB.sh
##
## バージョン : 1.0.0
## 作成者 : GDC XX
## 作成年月日 : 2009/04/07
##
## 更新者 : コ
## 最終更新日 : 2009/04/15
##--------------------------------------------------------------------------------------------------
##
##--------------------------------------------------------------------------------------------------
## 更新履歴
## GDC XX 2009/04/07 1.0.0 初版
## GDC コ 2009/04/15 1.1.0
## Pro_tbl_acnt()、Set_Flag()、Delete_File()三つの関数を追加
##
##
##--------------------------------------------------------------------------------------------------
##
##
##
##
#---------------------------------------------------------------------------------------------------
#Function : Init()
#Description : この関数の役割は、FUNCLIB.shに使用した全局変数をセットする。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Init()
{
export LOG_L='+----------------------------------------------------------------------+'
export LOG_STRING CURRENT_DATE CURRENT_TIME FILE_LG OUT_DIR_LOG
}
#---------------------------------------------------------------------------------------------------
#Function : Get_Date()
#Description : この関数の役割は、現行の期日をリターンする。
# : 期日格式:%Y/%m/%d %H:%M:%S
#Input Parameters: 無し
#Returns : CURRENT_DATE
#---------------------------------------------------------------------------------------------------
Get_Date()
{
CURRENT_DATE=`date +'%Y/%m/%d %H:%M:%S'`
# return echo $CURRENT_DATE
}
#---------------------------------------------------------------------------------------------------
#Function : Get_Time()
#Description : この関数の役割は、現行の時刻をリターンする。
# : 時刻格式:%H:%M:%S
#Input Parameters: 無し
#Returns : CURRENT_TIME
#---------------------------------------------------------------------------------------------------
Get_Time()
{
CURRENT_TIME=`date +'%H:%M:%S'`
}
#---------------------------------------------------------------------------------------------------
#Function : Start_Log()
#Description : この関数の役割は、ログファイルのタイトル情報を出力する。
# 使用した前に、二つ環境変数LOG_FILEおよびOUT_DIRを指定することが必要、
# 指定しない場合、下記のデフォルト値を使用する。
#Input Parameters:
# $1 = OUT_DIR デフォルト値:現行ディレクトリ
# $2 = LOG_FILE デフォルト値:log.log
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Start_Log()
{
Init
# if [ ! -n "$OUT_DIR" ] ; then
# OUT_DIR_LOG=`pwd`
# OUT_DIR_LOG="$OUT_DIR_LOG/log"
# else
# OUT_DIR_LOG="$OUT_DIR/log"
# fi
if [ ! -n "$OUT_DIR_LOG" ] ; then
export OUT_DIR_LOG=`pwd`
OUT_DIR_LOG="$OUT_DIR_LOG/log"
else
# DIR_LEN=`echo ${#OUT_DIR_LOG}`
typeset -i DIR_LEN=`expr length $OUT_DIR_LOG`
typeset -i DIR_LEN_1=`expr $DIR_LEN - 1`
# CHAR=`echo ${OUT_DIR_LOG:$DIR_LEN_1:1}`
CHAR=`expr substr $OUT_DIR_LOG $DIR_LEN_1 1`
if [ "$CHAR" = "/" ] ; then
# OUT_DIR_LOG=`echo ${OUT_DIR_LOG:0:$DIR_LEN_1}`
OUT_DIR_LOG=`expr substr $OUT_DIR_LOG 1 $DIR_LEN_1`
fi
fi
if [ ! -d "$OUT_DIR_LOG" ] ; then
mkdir -p -m 777 "$OUT_DIR_LOG"
fi
CURRENT_T=`date +'%Y%m%d%H%M%S'`
# if [ ! -n "$LOG_FILE" ] ; then
# unset $LOG_FILE
LOG_FILE="log_$CURRENT_T.log"
# fi
FILE_LG="$OUT_DIR_LOG/$LOG_FILE"
if [ ! -f "$FILE_LG" ] ; then
touch "$FILE_LG"
fi
printf "$LOG_L/n" >> $FILE_LG
Get_Date
Current_user=`whoami`
printf "**Current Time** $CURRENT_DATE/n**Current User** $Current_user/n" >> $FILE_LG
printf "$LOG_L/n/n" >> $FILE_LG
}
#---------------------------------------------------------------------------------------------------
#Function : End_Log()
#Description : この関数の役割は、ログファイルの結末情報を出力する。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
End_Log()
{
LOG_MSG="**Normal ended**"
typeset -i PAR_NUM=$#
if [ $PAR_NUM = 0 ] ; then
LOG_MSG="$LOG_MSG/n"
else
if [ $1 = 0 -o $1 = "NORMAL" -o $1 = "normal" ] ; then
LOG_MSG="$LOG_MSG/n"
else
LOG_MSG="**Error ended**/n"
fi
fi
printf "Log file:$FILE_LG/n"
Get_Date
TEMP="**Current Time**"
printf "/n$LOG_L/n$LOG_MSG$TEMP$CURRENT_DATE/n$LOG_L/n" >> "$FILE_LG"
}
#---------------------------------------------------------------------------------------------------
#Function : Write_Log()
#Description : この関数の役割は、蓄積したログメッセージをファイルに出力する。
#
#Input Parameters:
# $1=LOG_STRING 蓄積したログメッセージ、全局変数だ。
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Write_Log()
{
printf "$LOG_STRING" >> "$FILE_LG"
LOG_STRING=""
}
#---------------------------------------------------------------------------------------------------
#Function : Display_Log()
#Description : この関数の役割は、ユーザーが必要な時蓄積したログメッセージをファイルに出力する。
#
#Input Parameters:
# $1=LOG_STRING 蓄積したログメッセージ、全局変数だ。
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Display_Log()
{
if [ "$LOG_STRING" = "" ] ; then
return
else
Write_Log
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Set_Program_Sta_Log()
#Description : この関数の使い方は、各機能を実行する前に使用する。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Set_Program_Sta_Log()
{
typeset -i PAR_LEN=$#
Get_Time
if [ $PAR_LEN = 0 ] ; then
LOG_STRING="$LOG_L/n$CURRENT_TIME Starting....../n"
else
LOG_STRING="$LOG_L/n$CURRENT_TIME $1....../n"
fi
Write_Log
}
#---------------------------------------------------------------------------------------------------
#Function : Set_Program_End_Log()
#Description : この関数の使い方は、各機能を実行終了した後で使用する。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Set_Program_End_Log()
{
typeset -i PAR_LEN=$#
Get_Time
if [ $PAR_LEN = 0 ] ; then
LOG_STRING="$CURRENT_TIME Ended....../n$LOG_L/n"
else
LOG_STRING="$CURRENT_TIME $1....../n$LOG_L/n"
fi
Write_Log
}
#---------------------------------------------------------------------------------------------------
#Function : Msg_Process()
#Description : この関数は、本機能内で使用のみ、セットされるログメッセージを既定様式によって、
# 蓄積する。
#
#Input Parameters:
# $1=LOG_STRING 蓄積したログメッセージ、全局変数だ
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Msg_Process()
{
typeset -i LINE_NUM=800
# LINE_NUM=800
# typeset -i STR_NUM=`echo ${#1}`
typeset -i STR_NUM=`expr "$1" : ".*"`
if [ $STR_NUM -gt $LINE_NUM ] ; then
typeset -i i=1
STR_NUM=`expr $STR_NUM + $LINE_NUM`
typeset -i NUM=`expr $STR_NUM / $LINE_NUM`
while [ $i -le $NUM ]
do
if [ $i -eq 1 ] ; then
MSG_STRING=`expr substr "$1" 1 $LINE_NUM`
LOG_STRING="$LOG_STRING$MSG_STRING/n"
else
typeset -i j=`expr $i - 2`
typeset -i STEP_NUM=`expr $LINE_NUM - 9`
typeset -i k=`expr $j /* $STEP_NUM`
typeset -i STA_NUM=`expr $LINE_NUM + $k`
STR_NUM=`expr $STR_NUM + 1`
typeset -i CHA_COUNT=`expr $STA_NUM + $STEP_NUM`
if [ $CHA_COUNT -ge $STR_NUM ] ; then
STEP_NUM=`expr $STR_NUM - $STA_NUM`
STEP_NUM=`expr $STEP_NUM - 1`
# SUB_STR=`echo ${1:$STA_NUM:$STEP_NUM}`
SUB_STR=`expr substr "$1" $STA_NUM $STEP_NUM`
LOG_STRING="$LOG_STRING $SUB_STR/n"
else
# SUB_STR=`echo ${1:$STA_NUM:$STEP_NUM}`
SUB_STR=`expr substr "$1" $STA_NUM $STEP_NUM`
LOG_STRING="$LOG_STRING $SUB_STR/n"
fi
fi
i=`expr $i + 1`
done
else
LOG_STRING="$LOG_STRING $1 /n"
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Line_Break()
#Description : この関数は、本機能内で使用のみ、もしセットされるログメッセージにline breakが
# あれば、処理する。
#
#Input Parameters:
# $1=LOG_STRING 蓄積したログメッセージ、全局変数だ
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Line_Break()
{
S=$1
if [ "$S" = "" ] ; then
return
fi
typeset -i LEN=0
# LEN=0
while [ 1 ]
do
# typeset -i LEN=`echo ${#S}`
# typeset -i LEN=`expr length $S`
typeset -i LEN=`expr "$S" : ".*"`
typeset -i LEN_1=`expr $LEN - 1`
typeset -i LEN_2=`expr $LEN - 2`
# LB_S=`echo ${S:$LEN_2:$LEN}`
LB_S=`expr substr "$S" $LEN_1 2`
if [ "$LB_S" = "/n" ] ; then
# S=`echo ${S:0:$LEN_2}`
S=`expr substr "$S" 1 $LEN_2`
else
break
fi
done
typeset -i count=0
# count=0
S_SUB=$S
# FLAG_1=1
# FLAG_2=1
typeset -i FLAG_1=1
typeset -i FLAG_2=1
while [ 1 ]
do
# SUB_LEN=`echo ${#S_SUB}`
# typeset -i SUB_LEN=`expr length $S_SUB`
typeset -i SUB_LEN=`expr "$S_SUB" : ".*"`
# for i in `seq $SUB_LEN`
typeset -i i=1
while [ $i -le $SUB_LEN ]
do
typeset -i i_2=`expr $i + 2`
# CHAR=`echo ${S_SUB:$i:2}`
CHAR=`expr substr "$S_SUB" $i 2`
if [ "$CHAR" = "/n" ] ; then
typeset -i FLAG_2=2
# FLAG_2=2
typeset -i j=`expr $i - 1`
# MSG=`echo ${S_SUB:0:$i}`
MSG=`expr substr "$S_SUB" 1 $j`
if [ $FLAG_1 = 1 ] ; then
Msg_Process "$MSG"
typeset -i FLAG_1=2
# FLAG_1=2
else
MSG=" $MSG"
Msg_Process "$MSG"
fi
typeset -i k=`expr $i + 1`
typeset -i end=`expr $SUB_LEN - $k`
typeset -i NEXT_STA=`expr $i + 2`
# S_SUB=`echo ${S_SUB:$NEXT_STA:$end}`
S_SUB=`expr substr "$S_SUB" $NEXT_STA $end`
typeset -i count=`expr $count + 2`
break 1
else
typeset -i count=`expr $count + 1`
if [ $count -ge $LEN ] ; then
if [ $FLAG_2 = 1 ] ; then
Msg_Process "$S_SUB"
else
Msg_Process " $S_SUB"
fi
break 2
fi
fi
i=`expr $i + 1`
done
done
}
#---------------------------------------------------------------------------------------------------
#Function : Msg_Accumulation()
#Description : この関数は、本機能内で使用のみ、セットされるログメッセージを蓄積する。
#
#Input Parameters:
# $1=LOG_STRING 蓄積用ログメッセージ、全局変数だ
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Msg_Accumulation()
{
if [ "$1" = "" ] ; then
return
else
Get_Time
LOG_STRING="$LOG_STRING$CURRENT_TIME "
Line_Break "$1"
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Msg_Accumulation()
#Description : この関数は、セットされるログメッセージを標準輸出に出力する。
# ユーザー使用もいいです。
#
#Input Parameters:
# $1=LOG_STRING 蓄積用ログメッセージ、全局変数だ
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Set_Terminal()
{
typeset -i PAR_N=$#
if [ $PAR_N = 0 ] ; then
return
else
S=$1
if [ "$S" = "" ] ; then
return
fi
Get_Time
TER_MSG="$CURRENT_TIME:$1/n"
printf "$TER_MSG"
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Set_Log()
#Description : この関数は、セットされるログメッセージを標準輸出に出力する。
# ユーザー使用もいいです。
#
#Input Parameters:
# $1=LOG_STRING 蓄積用ログメッセージ、全局変数だ
# $2=OUTPUT_FLAG Y or N
# Yの場合は、ターミナルとログファイルに出力する。
# Nの場合は、ログファイルに出力のみです。
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Set_Log()
{
typeset -i PAR_NUM=$#
Msg="[Msg:]$1"
if [ $PAR_NUM -eq 0 ] ; then
return
elif [ $PAR_NUM -eq 1 ] ; then
Msg_Accumulation "$Msg"
elif [ $PAR_NUM -eq 2 ] ; then
if [ "$2" = "Y" ] ; then
Msg_Accumulation "$Msg"
Set_Terminal "$Msg"
else
Msg_Accumulation "$Msg"
fi
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Create_Dir()
#Description : この関数は、ユーザー指定したディレクトリを作成する。指定したディレクトリは
# もう存在すれば、作成しないこと。
#
#Input Parameters:
# $1=DIR ユーザー指定したディレクトリ
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Create_Dir()
{
DIR=$1
if [ "$DIR" = "" ] ; then
return
else
# DIR_LEN=`echo ${#DIR}`
typeset -i DIR_LEN=`expr length $DIR`
# CHAR=`echo ${DIR:$DIR_LEN:1}`
CHAR=`expr substr $DIR $DIR_LEN 1`
if [ "$CHAR" = "/" ] ; then
typeset -i DIR_LEN_1=`expr $DIR_LEN - 1`
# DIR=`echo ${DIR:1:$DIR_LEN_1}`
DIR=`expr substr $DIR 1 $DIR_LEN_1`
fi
if [ ! -d "$DIR" ] ; then
mkdir -p -m 777 "$DIR"
fi
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Create_File()
#Description : この関数は、ユーザー指定したディレクトリファイル名を作成する。指定した
# ディレクトリにファイルがもう存在すれば、作成しないこと。
#
#Input Parameters:
# $1=DIR ユーザー指定したディレクトリ
# $1=FILE_NAME ユーザー指定したファイル名
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Create_File()
{
typeset -i PAR_NUM=$#
if [ $PAR_NUM = 2 ] ; then
if [ "$1" = "" -o "$1" = "" ] ; then
return
else
DIR=$1
FILE_N=$2
# DIR_LEN=`echo ${#DIR}`
typeset -i DIR_LEN=`expr length $DIR`
# CHAR=`echo ${DIR:$DIR_LEN:1}`
CHAR=`expr substr $DIR $DIR_LEN 1`
if [ "$CHAR" != "/" ] ; then
DIR="$1/"
fi
# CHAR=`echo ${FILE_N:1:1}`
CHAR=`expr substr $FILE_N 1 1`
if [ "$CHAR" = "/" ] ; then
DIR="$1/"
# FILE_N_LEN=`echo ${#FILE_N}`
typeset -i FILE_N_LEN=`expr length $FILE_N - 1`
# FILE_N=`echo ${FILE_N:2:$FILE_N_LEN}`
FILE_N=`expr substr "$FILE_N" 2 $FILE_N_LEN`
fi
FILE="$DIR$FILE_N"
if [ ! -f "$FILE" ] ; then
touch "$FILE"
fi
fi
else
echo "your dirctory or filename invalid."
return
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Create_Sqlfile()
#Description : この関数は、ユーザー指定したSQL文によると、SQLスクリプトファイルを作成すること。
#
#Input Parameters:
# $1=SQL_STRING SQL文 必要
# $2=OUTPUT_CSV CSVファイル名とアウトプットディレクトリ 必要
# $3=OUTPUT_COUNT_CSV データ件数
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Create_Sqlfile()
{
SQL_STRING=$1
OUTPUT_CSV=$2
OUTPUT_COUNT_CSV=$3
SQL_SCRIPT="$OUTPUT_DIR/sql_temp.sql"
# DIR_LEN=`echo ${#SQL_STRING}`
typeset -i DIR_LEN=`expr length "$SQL_STRING"`
# typeset -i DIR_LEN_1=`expr $DIR_LEN - 1`
# CHAR=`echo ${SQL_STRING:$DIR_LEN_1:1}`
CHAR=`expr substr "$SQL_STRING" $DIR_LEN 1`
if [ "$CHAR" != ";" ] ; then
SQL_STRING="$SQL_STRING;"
fi
echo "set SERVEROUTPUT OFF;
set FEEDBACK OFF;
set HEADING OFF;
set ECHO OFF;
set PAGES 0
set LINESIZE 0
set COL 0
set TRIMSPOOL ON
spool $OUTPUT_CSV
$SQL_STRING
spool off
" > $SQL_SCRIPT
Process_Sqlfile "$SQL_SCRIPT_N"
}
#---------------------------------------------------------------------------------------------------
#Function : Process_Sqlfile()
#Description : この関数は、Create_Sqlfile関数から、SQLスクリプトファイルを取って、SPOOLでCSV
# ファイルに出力すること。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Process_Sqlfile()
{
if [ ! -f "$FILE_LG" ] ; then
Set_Log "Please check your SQL script file./nyour dirctory or filename invalid." "$Terminal_Flag"
return
fi
SQLBUF=`sqlplus $ORACLE_USER/$ORACLE_PWD << EOF
@$SQL_SCRIPT;
EOF`
Check_Result "$OUTPUT_CSV"
}
#---------------------------------------------------------------------------------------------------
#Function : Check_Result()
#Description : この関数は、Process_Sqlfileで作成したCSVファイルにエラーデータの有無を調査
# すること。
#
#Input Parameters: 無し
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Check_Result()
{
MSG_1='CSV file has not been created.'
MSG_1='CSVファイルが作成されません。'
if [ ! -f "$OUTPUT_CSV" ] ; then
rm -r $SQL_SCRIPT
SQL_ERROR_FLAG="Y"
Set_Log "不明なエラー発生しました。/nログを調べてください。/n$MSG_1" "$Terminal_Flag"
return
fi
typeset -i DATA_COUNT=`cat $OUTPUT_CSV |wc -l`
if [ $DATA_COUNT -gt 0 ] ; then
typeset -i ERROR_COUNT=`cat $OUTPUT_CSV | grep -c "$SQL_ERROR_STR"`
typeset -i ERROR_COUNT_1=`cat $OUTPUT_CSV | grep -c "SP2"`
if [ $ERROR_COUNT -gt 0 ] ; then
STRING=`cat $OUTPUT_CSV | grep "$SQL_ERROR_STR"`
Set_Log "$STRING/n$MSG_1" "$Terminal_Flag"
# rm -r $OUTPUT_CSV
printf "" > $OUTPUT_CSV
rm -r $SQL_SCRIPT
SQL_ERROR_FLAG="Y"
elif [ $ERROR_COUNT_1 -gt 0 ] ; then
STRING=`cat $OUTPUT_CSV | grep "SP2"`
Set_Log "$STRING/n$MSG_1" "$Terminal_Flag"
## rm -r $OUTPUT_CSV
printf "" > $OUTPUT_CSV
rm -r $SQL_SCRIPT
SQL_ERROR_FLAG="Y"
else
rm -r $SQL_SCRIPT
if [ "$OUTPUT_COUNT_CSV" != "" ] ; then
Check_File_Line
fi
SQL_ERROR_FLAG="N"
fi
else
SQL_ERROR_FLAG="D"
rm -r $SQL_SCRIPT
Check_File_Line
# rm -r $OUTPUT_CSV
# Set_Log "Data not found." "$Terminal_Flag"
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Check_File_Line()
#Description : この関数は、CSVファイルを作成した場合、いくつ行目をリターンすること。
#
#Input Parameters:
# $1=DIR ユーザー指定したディレクトリ
# $1=FILE_NAME ユーザー指定したファイル名
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Check_File_Line()
{
typeset -i DATA_LINE=`cat $OUTPUT_CSV |wc -l`
if [ $DATA_LINE -gt 1 ] ; then
Set_Log "$DATA_LINE rows selected." "$Terminal_Flag"
printf "$DATA_LINE" > $OUTPUT_COUNT_CSV
else
Set_Log "$DATA_LINE rows selected./nData not found." "$Terminal_Flag"
printf "0" > $OUTPUT_COUNT_CSV
fi
}
#---------------------------------------------------------------------------------------------------
#Function : Pro_tbl_acnt()
#Description : この関数は、PL/SQLのプログラムを呼び、spoolで処理する。
#
#Input Parameters:
# $1=DIR ユーザー指定したディレクトリ
# $1=FILE_NAME ユーザー指定したファイル名
#Returns : 無し
#---------------------------------------------------------------------------------------------------
Pro_tbl_acnt()
{
if [ ! -f "$FILE_LG" ] ; then
Set_Log "Please check your SQL script file./nyour dirctory or filename invalid." "$Terminal_Flag"
return
fi
ERRORBUF==`sqlplus $ORACLE_USER/$ORACLE_PWD << EOF
set SERVEROUTPUT ON size 1000000;
set FEEDBACK OFF;
set HEADING OFF;
set ECHO OFF;
set PAGES 0
set LINESIZE 0
set COL 0
spool $OUTPUT_CSV
@$SQL_SCRIPT;
spool off
EOF`
grep -v '^SQL>' $OUTPUT_CSV > "$OUTPUT_DIR/rec_count_temp.txt"
cat $OUTPUT_DIR/rec_count_temp.txt > $OUTPUT_CSV
Delete_File "$OUTPUT_DIR/rec_count_temp.txt"
Check_Result "$OUTPUT_CSV"
}
#---------------------------------------------------------------------------------------------------
#Function : Set_Flag()
#Description : この