shell 使用diff 命令对比文件 并发送邮件
1 #!bin/bash 2 3 kettleConfigHome=/home/vmuser/linbo/kettleDemo/job/config 4 apiInfos=/home/vmuser/linbo/kettleDemo/job/data/apiInfo 5 pfile=/home/vmuser/linbo/kettleDemo/job/practiceSH/profiles 6 api_csv_path_home=/home/vmuser/linbo/test_upload/data_file 7 sendMailData=/home/vmuser/linbo/kettleDemo/job/sendData 8 dtm=`date +"%Y-%m-%d %H:%M:%S"` 9 dt=`date +"%Y%m%d"` 10 lastDay=`date -d "1 day ago" +"%Y%m%d"` 11 echo "lastDay=${lastDay}" 12 13 ls $api_csv_path_home >$apiInfos/apiName.txt 14 ## 判断有多少接口需要进行文件对比,有几行就说明有几个接口 15 apiCnt=$(cat ${apiInfos}/apiName.txt | wc -l) 16 echo "****************共计有 $apiCnt 个api接口需要进行csv文件对比!*******************" 17 for((i=1;i<=apiCnt ;i++)); 18 do 19 sendMail=false ; 20 21 cd $pfile 22 apiName=`cat $apiInfos/apiName.txt |sed -n "${i}p"` 23 echo "${i}_apiName=$apiName" 24 rm -rf $apiInfos/${lastDay}_${apiName}_csvList.txt 25 26 cd $api_csv_path_home/$apiName/prod 27 ls |grep ${dt}. >$apiInfos/${dt}_${apiName}_csvList.txt 28 # 今天生成的csv文件个数 29 lineCnt=$(awk 'END{print NR}' $apiInfos/${dt}_${apiName}_csvList.txt) 30 if [[ ${lineCnt} == 0 ]]; then 31 32 echo "**************** lineCnt=$lineCnt 今天没有生成文件 不需要对比 continue ! ***************" 33 continue 34 fi 35 echo "#修改邮件主题 topic=$apiName " 36 cd $kettleConfigHome 37 sed -i "s#^topic=.*#topic=${dt}_$apiName#g" ./sandMailVariate.properties 38 39 40 for((j=1;j<=$lineCnt;j++)); 41 do 42 apiCsvPath=${api_csv_path_home}/${apiName} 43 prod_csvName=`cat $apiInfos/${dt}_${apiName}_csvList.txt |sed -n "${j}p"` 44 uat_csvName=uat_$prod_csvName 45 echo "${i}_${j}_prod_csvName=$prod_csvName" 46 echo "${i}_${j}_uat_csvName=$uat_csvName" 47 48 diff $apiCsvPath/prod/${prod_csvName} $apiCsvPath/test/${uat_csvName} >$sendMailData/difflog/${prod_csvName%.*}_diff_${dt}.log 49 flags=`cat $sendMailData/difflog/${prod_csvName%.*}_diff_${dt}.log |wc -l` 50 echo "flags=${flags}" 51 if [[ $flags != 0 ]]; then 52 echo "删除上一天的发送容 rm -rf ${sendMailData}/${apiName}/${lastDay} " 53 rm -rf ${sendMailData}/${apiName}/${lastDay} 54 echo "创建 ${sendMailData}/${apiName}/${dt}/${prod_csvName%.*} 目录" 55 mkdir -p ${sendMailData}/${apiName}/${dt}/${prod_csvName%.*} 56 echo "将日志移动到 $sendMailData/${apiName}/${dt}/${prod_csvName%.*}目录下 " 57 mv $sendMailData/difflog/${prod_csvName%.*}_diff_${dt}.log $sendMailData/${apiName}/${dt}/${prod_csvName%.*} 58 echo "将 ${prod_csvName} 和 ${uat_csvName} 文件cp 到 $sendMailData/${apiName}/${dt}/${prod_csvName%.*} 目录下 " 59 cp $apiCsvPath/prod/${prod_csvName} $sendMailData/${apiName}/$dt/${prod_csvName%.*} 60 cp $apiCsvPath/test/${uat_csvName} $sendMailData/${apiName}/$dt/${prod_csvName%.*} 61 echo "修改配置 发送邮件的时候 将该路径下的内容作为附件 发送出去 !" 62 sed -i "s#^attachment_filePath=.*#attachment_filePath=//home//vmuser//linbo//kettleDemo//job//sendData//${apiName}//${dt}#g" $kettleConfigHome/sandMailVariate.properties 63 64 echo "--------修改发送邮件标志--------" 65 sendMail=true 66 fi 67 68 done 69 echo "sendMail=$sendMail" 70 71 if [[ $sendMail == true ]]; then 72 73 echo "********************************发送邮件********************************" 74 sh /home/vmuser/linbo/kettleDemo/job/kjb/execSendMail.sh 75 fi 76 77 78 79 done