shell脚本连接ftp推送文件夹_Linux使用Shell脚本实现FTP自动下载文件,并记录下载文件日志...

Linux使用Shell脚本实现FTP自动下载文件,并记录下载文件日志

最近初学shell编程,记一下自己写的第一个脚本。有问题可以找我一起讨论,交流下。

Email: 27889358@qq.com

首先这个shell脚本,必须使用命令行vim编辑器创建这个shell脚本,不然ftp连接那里会出现错误。 [root@localhost /]# vim file_from_ftp.sh #!/bin/bash

usage(){

echo "############################################################################################################"

echo -e " Usage: $0 [OPTIONS]"

echo -e " xxxx-xx-xx:文件后加入日期参数 xxxx-xx-xx,例如:2019-08-01会下载当天的FTP文件。 ."

echo -e " all: 文件后加入*号,会下在所有的FTP文件。默认会覆盖所有文件"

echo "############################################################################################################"

exit 1

}

HOST=192.168.0.10 #远程FTP服务器地址

PORT=21

USER=xxx #远程FTP服务器用户名

PASSWD=xxx123 #远程FTP服务器密码

REMOTE_DIR=/ #远程FTP服务器目录

LOCAL_DIR=/soft/test1#对应的本地服务器目录

LOCAL_DIR_LOG=$LOCAL_DIR/logs#对应的本地服务器目录

#获取前一天的时间

date1=`date -d last-day +%Y%m%d`

date2=`date -d last-day +%Y-%m-%d`

#date1=`date +%Y%m%d --date="-7 day"`

#date2=`date +%Y-%m-%d --date="-7 day"`

shlog(){

local line_no msg

line_no=$1

msg=$2

echo "[file_from_ftp.sh][$line_no]["`date "+%Y-%m-%d %H:%M:%S"`"] $msg ">> ${LOCAL_DIR_LOG}/file_from_ftp${date2}.log

}

shlogAllFile(){

local line_no msg

line_no=$1

msg=$2

echo "[file_all_from_ftp.sh][$line_no]["`date "+%Y-%m-%d %H:%M:%S"`"] $msg ">> ${LOCAL_DIR_LOG}/file_all_from_ftp${date2}.log

}

##下载所有全部文件校验##

function checkFilePros()

{

echo "%%%%%%%%%%%%%%下载所有全部文件##############%$%%%%%%%%%%%"

shlogAllFile $LINENO "%%%%%%%%%%%%%%%%%FTP服务器下载所有全部文件%%%%%%%%%%%%%%%%%%%%%%%%"

let "fileNumFromFtp = 0"

let "fileNumFromFtpError = 0"

for file in $LOCAL_DIR/$1

do

if test -f $file

then

fileName=${file##*/}

FTPSIZE=`cat $LOCAL_DIR_LOG/tmp_all_from_ftp${date2}.log |sed -n '/'${fileName}'/p' |awk '{print $5}'`

LOCALSIZE=`ls -l $LOCAL_DIR/${fileName} |awk '{print $5}'`

echo "%%%%%%%%%%%%%%% ${file##*/} FTPSIZE:==== $FTPSIZE LOCALSIZE:==== $LOCALSIZE"

if [ "$FTPSIZE" != "" ] && [ "$FTPSIZE" == "$LOCALSIZE" ]; then

let "fileNumFromFtp+=1"

shlogAllFile $LINENO "FTP服务器 ${fileName}文件下载到本地 ${file}成功"

else

let "fileNumFromFtpError+=1"

shlogAllFile $LINENO "FTP服务器 ${fileName}文件下载到本地 ${file}失败"

fi

fi

done

echo "FTP下载的文件成功success个数: $fileNumFromFtp 个数"

echo "FTP下载的文件失败error个数: $fileNumFromFtpError 个数"

shlogAllFile $LINENO "FTP下载的文件成功success个数: $fileNumFromFtp 个数"

shlogAllFile $LINENO "FTP下载的文件失败error个数: $fileNumFromFtpError 个数"

rm -rf ${LOCAL_DIR_LOG}/tmp_all_from_ftp${date2}.log

}

##下载某一天的文件校验##

function checkFilePros1()

{

let "fileNumFromFtp = 0"

let "fileNumFromFtpError = 0"

for file in $LOCAL_DIR/$1

do

if test -f $file

then

#echo "%%%%%%%%%%%%%%% ${file##*/}"

fileName=${file##*/}

FTPSIZE=`cat $LOCAL_DIR_LOG/tmp_from_ftp${date1}.log |sed -n '/'${fileName}'/p' |awk '{print $5}'`

LOCALSIZE=`ls -l $LOCAL_DIR/${fileName} |awk '{print $5}'`

echo "%%%%%%%%%%%%%%% ${fileName} FTPSIZE:==== $FTPSIZE LOCALSIZE:==== $LOCALSIZE"

if [ "$FTPSIZE" != "" ] && [ "$FTPSIZE" == "$LOCALSIZE" ]; then

let "fileNumFromFtp+=1"

shlog $LINENO "FTP服务器 ${fileName}文件下载到本地 ${file}成功"

else

let "fileNumFromFtpError+=1"

shlog $LINENO "FTP服务器 ${fileName}文件下载到本地 ${file}失败"

fi

fi

done

for file in $LOCAL_DIR/$2

do

if test -f $file

then

#echo "%%%%%%%*_$date2.csv%%%%%%%% ${file##*/}"

fileName=${file##*/}

FTPSIZE=`cat $LOCAL_DIR_LOG/tmp_from_ftp${date2}.log |sed -n '/'${fileName}'/p' |awk '{print $5}'`

LOCALSIZE=`ls -l $LOCAL_DIR/${fileName} |awk '{print $5}'`

echo "%%%%%%%%%%%%%%% ${fileName} FTPSIZE:==== $FTPSIZE LOCALSIZE:==== $LOCALSIZE"

if [ "$FTPSIZE" != "" ] && [ "$FTPSIZE" == "$LOCALSIZE" ]; then

let "fileNumFromFtp+=1"

shlog $LINENO "服务器 ${fileName}文件下载到本地 ${file}成功"

else

let "fileNumFromFtpError+=1"

shlog $LINENO "FTP服务器 ${fileName}文件下载到本地 ${file}失败"

fi

fi

done

echo "FTP下载的文件成功success个数: $fileNumFromFtp 个数"

echo "FTP下载的文件失败error个数: $fileNumFromFtpError 个数"

shlog $LINENO "FTP下载的文件成功success个数: $fileNumFromFtp 个数"

shlog $LINENO "FTP下载的文件失败error个数: $fileNumFromFtpError 个数"

rm -rf ${LOCAL_DIR_LOG}/tmp_from_ftp${date1}.log

rm -rf ${LOCAL_DIR_LOG}/tmp_from_ftp${date2}.log

}

function downloadFtpFile()

{

echo "下载FTP存放的本地路径: $LOCAL_DIR"

echo "ftp mutl file start ......"

ftp -v -n $HOST<

user $USER $PASSWD

binary

cd $REMOTE_DIR

lcd $LOCAL_DIR

prompt

mget $1

ls $REMOTE_DIR$1 ${LOCAL_DIR_LOG}/tmp_all_from_ftp${date2}.log

bye

EOF

checkFilePros $1

#打印环境变量信息

echo "download successfully from ftp all file ending......"

}

function downloadFtpFile1()

{

echo "下载FTP存放的本地路径: $LOCAL_DIR"

echo "ftp mutl file start ......$1 "

echo "ftp mutl file start ......$2 "

matchStr1=$1

matchStr2=$2

ftp -v -n $HOST<

user $USER $PASSWD

binary

cd $REMOTE_DIR

lcd $LOCAL_DIR

prompt

mget $matchStr1

mget $matchStr2

ls $REMOTE_DIR$1 ${LOCAL_DIR_LOG}/tmp_from_ftp${date1}.log

ls $REMOTE_DIR$2 ${LOCAL_DIR_LOG}/tmp_from_ftp${date2}.log

bye

EOF

checkFilePros1 ${matchStr1} ${matchStr2}

#打印环境变量信息

echo "download successfully from ftp all file ending......"

}

function createFileDir() {

shlog $LINENO "******************检查待接收下载文件根目录是否存在,不存在则创建该目录************************"

if [ ! -d ${LOCAL_DIR_LOG} ]; then

mkdir -p ${LOCAL_DIR_LOG}

fi

}

echo "Input Param Is [$1]"

if [ ! -n "$1" ] ;then

shlog $LINENO ""

shlog $LINENO "*****************************${date2}数据文件下载开始****************************************"

createFileDir

echo "###########################################"

echo " *_${date1}.csv *_${date2}.csv"

echo "###########################################"

param1=*_${date1}.csv

param2=*_${date2}.csv

downloadFtpFile1 ${param1} ${param2}

shlog $LINENO "*****************************${date2}数据文件下载结束****************************************"

elif [ -n "$1" ];then

#echo "这里是指定输入的日期,例如选择要下载一天的文件"

if echo $1 | grep -Eq "[0-9]{4}-[0-9]{2}-[0-9]{2}" && date -d $1 +%Y%m%d > /dev/null 2>&1

then

echo "输入的日期格式正确: $1";

param1=$1

echo "######param1#param1###### $param1"

param2=${param1//-/}

echo "######param2#param2###### $param2"

echo "*_${param2}.csv *_${param1}.csv"

shlog $LINENO ""

shlog $LINENO "*****************************${param1}数据文件下载开始****************************************"

createFileDir

downloadFtpFile1 *_${param2}.csv *_${param1}.csv

shlog $LINENO "*****************************${param1}数据文件下载结束****************************************"

elif [ $1 == 'all' ];then

echo "all 下载所有全部文件##############%$%%%%%%........................."

downloadFtpFile *.csv

else

usage

fi

else

echo "这里没有用,永远不会进来的"

fi

exit 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值