読者です 読者をやめる 読者になる 読者になる

MyController

WEB業界素人の僕がまた見返しそうなことのメモです。

CSVデータに異常があればアラートメールを飛ばす監視バッチ

とりまつくったやつ

 

#!/bin/bash
cd /var/www/html/catalog/products/

#JANコード検査
#13桁数字 or 7桁-6桁のみ正常な仕様。2行目移行取得
jancodelist=`awk -F, 'NR > 1 {print $6}' data.csv`

#商品カタログは2行目以降取得しているので行番号を設定
i=1
for jancode in $jancodelist;do
#JANコード(49000-00000)のような形式でハイフンの左側にある文字数を格納
janleft=${jancode%-*}
janleft_nm=${#janleft}
janright=${jancode##*-}
janright_nm=${#janright}

#JANコード13ケタかどうか
if [ ${#jancode} = 13 ];then
#英字、記号チェック
if [ `echo $jancode | grep -e '[a-zA-Z/-\=!"#$%&().<>_+;:]'` ]; then
i=$*1
#echo JANコードに英字や記号等が含まれています $jancode $i
#$iは行番号なのでそれを配列にいれる
earray=("${earray[@]}" "$i ,")
continue
fi
elif [ $janleft_nm = 7 -a $janright_nm = 6 ]; then
i=$*2
#echo 7桁-6桁なのでOK $jancode $i
continue
elif [ ! ${#jancode} = 13 -a ! ${#jancode} = 0 ]; then
i=$*3
#echo 桁数異常 $jancode $i
#$iは行番号なのでそれを配列にいれる
earray=("${earray[@]}" "$i ,")

 

continue
fi

i=$*4
done

echo ループ抜けた後にエラー箇所の行番号を表示↓
echo ${earray[@]}
echo "商品カタログデータにエラーがあります" 行番号は(data.csv ${earray[@]} 行目) | mailx -s 商品カタログ監視バッチ XXXXXX@aaa.com 

 

条件

・数字-数字 という仕様はOK

・数字13ケタ という仕様はOK

 

上記以外で記号が入ってきたり英語が入ってきたりしたらNGとしてメール発砲w

 

難しいことはやってないんだけど、書き方が特殊でなれないと時間かかるね。

 

 

*1: i+1

*2: i+1

*3: i+1

*4: i+1