项目需求要去一个文件服务器下载对账文件,保存至我们系统的前置服务器。然后其他厂商连入我们的前置服务器,将文件取走进行解析。
脚本完成后,又细想了一下,我的脚本如果获取不到文件,就会在后台一直运行。这样非常有风险,很可能会日志写太多,导致硬盘满掉。我需要让它能执行一定次数后,停下来。

#!/bin/bash
#@author:ping
#@phone:
#@function:本脚本用来定时从GC服务器下载对账文件至第三方支付系统的前置服务器
#          对账文件全部下载完成后会生成一个.ok文件
#@instructions:1、定时任务实现  2、脚本+日期(形如  ./ftpDownload.sh 20180820)
#@associative directory:
#   日志目录: /apache/swift/unionPayReckonFile/logs
#   脚本目录: /apache/swift/ 
#   对账文件目录: /apache/swift/unionPayReckonFile
##############################如下为定义的变量区###########################
#配置文件的路径
configPath=$PWD/.ftpDownload.conf
#默认当前系统前一日
if [ ! -n "$1" ];then
    tradeDay=`date -d "1 days ago" +%Y%m%d`
else 
    tradeDay=$1
fi 
#定义服务器系统时间
today=`date +%Y%m%d`
#定义本地的下载存放目录
localDire="/apache/swift/unionPayReckonFile/"
#定义日志目录
logDire="/apache/swift/unionPayReckonFile/logs/"
#日志文件后缀名
suffixName=".log"
#截取日期
subYesterday=`expr substr "$tradeDay" 3 6 `
#定义五个需要的文件名
file1="IND"$subYesterday"01ACOMN"
file2="IND"$subYesterday"99ALFEE"
file3="IND"$subYesterday"99ILFEE"
file4="IND"$subYesterday"99AFCP"
file5="IND"$subYesterday"99IFCP"
file6="IND"$subYesterday"01ACOMN.ok"    ##确认文件
#定义一个空白数组,用来存放获取成功的文件
succ_arr=()
####################GC服务器信息######################
#ip=192.168.43.237
#FTP账号
#u=tppview
#FTP密码
#pass=Tpp12#$
#GC服务器的目录地址
#remoteDire="/home/gbatch/batch/file/"
#addtoDire="/0000/CUP/04791922/"
####################GC服务器信息######################
#GC服务器地址,40.3.11.6为备用服务器,如果40.3.11.5发生宕机,可以修改ip切换到备用服务器。
ip=`grep "gc_ip" $configPath |awk -F= '{printf "%s",$2}'`
#FTP账号
u=`grep "gc_u" $configPath |awk -F= '{printf "%s",$2}'`
#FTP密码
pass=`grep "gc_pass" $configPath |awk -F= '{printf "%s",$2}'`
#GC服务器的目录地址
remoteDire=`grep "gc_remoteDire" $configPath |awk -F= '{printf "%s",$2}'`
addtoDire=`grep "gc_addtoDire" $configPath |awk -F= '{printf "%s",$2}'`
####################函数定义######################
ftpFun(){
   ftp -n <> $logDire$tradeDay$suffixName
echo "**********脚本开始执行时间`date +"%Y-%m-%d %H:%M:%S"`*******"  >> $logDire$tradeDay$suffixName
if [ ! -d "$logDire" ];then
    mkdir "$logDire"
    echo "创建日志目录======$logDire"
fi
if [ ! -d "$localDire$tradeDay" ];then
    mkdir "$localDire$tradeDay"
    echo "对账文件将会保存在[$localDire$tradeDay]的目录下" >> $logDire$tradeDay$suffixName
fi
cd $localDire$tradeDay //切换目录

if [ -f "$localDire$tradeDay"/"$file6" ];then
       echo "目录[$localDire$tradeDay]下已经存在确认文件[$file6]"  >> $logDire$tradeDay$suffixName
       echo "交易日[$tradeDay]的对账文件已经下载完成"   >> $logDire$tradeDay$suffixName
   else
       echo "不存在确认文件[$file6],开始下载对账文件" >> $logDire$tradeDay$suffixName
             i=1 #对下载成功的文件个数计数
       for fileName in $file1 $file2 $file3 $file4 $file5;do
             j=1 #对休眠次数计数
             until  [ -f $localDire$tradeDay"/"$fileName ];do
                    echo "开始下载对账文件=================="$fileName  >> $logDire$tradeDay$suffixName
                    ftpFun $fileName
                    echo "对账文件下载过程结束=================="$fileName  >> $logDire$tradeDay$suffixName
            echo "$localDire$tradeDay"/"$fileName =====文件名"
                    if [ -f $localDire$tradeDay"/"$fileName ];then
                       echo "对账文件[$fileName]已经下载到本地目录[$localDire$tradeDay]" >> $logDire$tradeDay$suffixName 
                       succ_arr[i]=$fileName
                       echo "下载的第$i个文件是$fileName" >> $logDire$tradeDay$suffixName
                       let i=i+1
                    else
                       echo "本次没有获取到对账文件============"$fileName  >> $logDire$tradeDay$suffixName 
                       echo "休眠15分钟后继续下载文件==========="$fileName  >> $logDire$tradeDay$suffixName
                       sleep 1s  #休眠15分钟   
                       if [ $j -gt 4 ];then
                          break
                       else
                        echo "$fileName文件下载过程的第$j次休眠" >> $logDire$tradeDay$suffixName
                        let j=j+1
                       fi 
                    fi
             done
       done
       num=${#succ_arr[@]}
       if [ -z "$num" ];then
          echo "交易日[$tradeDay]的对账文件没有下载完成,存放路径为[$localDire$tradeDay]"  >> $logDire$tradeDay$suffixName
          echo "一个文件也没有下载成功"      >> $logDire$tradeDay$suffixName
       else 
          echo "下载成功的文件个数是$num"    >> $logDire$tradeDay$suffixName
          if [ 5 -eq $num ];then
             touch $localDire$tradeDay"/"$file6
             echo "交易日[$tradeDay]的对账文件全部下载完成,存放路径为[$localDire$tradeDay]"  >> $logDire$tradeDay$suffixName
          else
             echo "交易日[$tradeDay]的对账文件没有全部下载完成,存放路径为[$localDire$tradeDay]"  >> $logDire$tradeDay$suffixName
          fi
       fi
fi
##############################################################################################################
echo "**********对账文件下载的脚本执行结束***********" >> $logDire$tradeDay$suffixName
echo "**********脚本结束时间`date +"%Y-%m-%d %H:%M:%S"`*****"  >> $logDire$tradeDay$suffixName