0.あらすじ
AIX用のシステム構築で、タイトルのようなバッチを作成することに。
処理自体はよくあるロジックなのでそんなに苦労しないかと思いきや
初めてのbashだった上に、
AIXのdateコマンドがアレなせいで非常に苦労した。
次にAIXで同じような事にならないよう、備忘としてアップロード。
1.コード本編
ポイントは前述の通り日付関連。
AIXなのでTZを使ってゴニョゴニョしてます。
その他のロジックはbashなら他の*nixでも
同じような感じになると思われるけど、
当時bash初心者だったので色々汚い可能性大。
ちょくちょく出てくるファイル内で宣言していない変数は
全て共通環境変数から引っ張ってます。
#!/bin/bash
# 機能名:ログファイル削除
# 引数(1):日数
# 引数(2):種類(1:ログ 2:BAD 3:取込データ 4:連携データ)
#ファイル削除メソッド(引数1:取得日付フラグ 引数2:対象フォルダ 引数3:対象拡張子 引数4:日数)
delFile(){
declare -i FLG
declare -i FILE_DATE
declare -i EXPIRE_DATE
#引数でもらった日数までの時間を出しておく
PLUS_DATE=`expr 24 \* $4 - 9`
#削除対象日付取得
if [ $1 -eq 0 ]
then
#引数でもらった日数までの時間をJSTに足して強引に日付計算
#こちらは年月日まで
NOW_DATE=`TZ=JST+${PLUS_DATE} date +%Y%m%d`
EXPIRE_DATE=${NOW_DATE}
elif [ $1 -eq 1 ]
then
#上と同じく日付計算
#こちらは秒まで取得
NOW_DATE=`TZ=JST+${PLUS_DATE} date +%Y%m%d%H%M%S`
EXPIRE_DATE=${NOW_DATE}
fi
#findで対象フォルダの対象拡張子ファイルを拾ってループ
find $2 -name "$3"|while read LINE
do
#ファイル名日付取得
TEMP_DATE=`basename ${LINE}`
#日付切り出し
#日付の形式が日までと秒までの二形式あったので分岐
if [ $1 -eq 0 ]
then
TEMP_DATE=${TEMP_DATE:6:14}
elif [ $1 -eq 1 ]
then
TEMP_DATE=${TEMP_DATE:0:4}${TEMP_DATE:5:2}${TEMP_DATE:8:2}${TEMP_DATE:11:2}${TEMP_DATE:14:2}
fi
FILE_DATE=${TEMP_DATE%.*}
#数値チェック
num=`expr ${FILE_DATE} : [0-9]`
if [[ ! $num -eq 1 ]]
then
FLG=1
else
FLG=0
fi
#削除判定
if [[ "$FLG" -eq 0 && "$FILE_DATE" -ne 0 && "$FILE_DATE" -lt "$EXPIRE_DATE" ]]
then
#削除実行
rm -f "${LINE}"
fi
done
}
#共通環境変数読み込み
. COMMON.sh
SCRPT_NAME="DEL_FILE.sh"
#ログ出力
${SCRPT_SHLOG} ${SCRPT_NAME} "I" "ファイル削除開始 $1"
#削除対象判断
if [ $2 -eq 1 ]
then
#ログ削除
delFile 0 ${SCRPT_LOG} *.log $1
elif [ $2 -eq 2 ]
then
#BAD削除
delFile 1 ${SCRPT_LDR}/BAD *.bad $1
elif [ $2 -eq 3 ]
then
#取込データ削除
#OKフォルダ(DAT)
delFile 1 ${SCRPT_LDR}/OK *.DAT $1
#OKフォルダ(rxd)
delFile 1 ${SCRPT_LDR}/OK *.rxd $1
#OKフォルダ(txd)
delFile 1 ${SCRPT_LDR}/OK *.txd $1
#NGフォルダ(DAT)
delFile 1 ${SCRPT_LDR}/NG *.DAT $1
#NGフォルダ(rxd)
delFile 1 ${SCRPT_LDR}/NG *.rxd $1
#NGフォルダ(txd)
delFile 1 ${SCRPT_LDR}/NG *.txd $1
elif [ $2 -eq 4 ]
then
#連携データ削除
#OKフォルダ
delFile 1 ${SCRPT_BKUP}/RENKEI/OK *.zip $1
#NGフォルダ
delFile 1 ${SCRPT_BKUP}/RENKEI/NG *.zip $1
else
${SCRPT_SHLOG} ${SCRPT_NAME} "E" "引数2が不正です"
${SCRPT_SHLOG} ${SCRPT_NAME} "E" "異常終了"
exit 9
fi
exit 0