文章目录
- 一、需求文档说明
- 二、脚本解释/说明
- 三、脚本内容
- 3.1. 案例脚本
- 3.2. 案例脚本升级
一、需求文档说明
序号 | 要求 | 说明 |
---|---|---|
① | 协议 | 使用ftp协议远程下载 |
② | 文件类型 | .zip |
③ | 文件名 | ac_UPpp |
④ | 远程下载目录 | 用户根目录(不需要切换目录) |
⑤ | 本服务器下载存放目录 | /blacklist/xmldata/Lists |
二、脚本解释/说明
脚本拆解 | 释义说明 | 执行命令 |
---|---|---|
① | 日志文件名拼接fname | 存放全部日志目录+随机生成以日期规则.log结尾的文件 |
② | 错误日志拼接elog | 存放异常日志目录+随机生成以日期规则.log结尾的文件 |
③ | sftp连接格式 | lftp -u 用户名,密码 ftp://ip地址:端口 <<EOF > "$fname" 2>&1 |
④ | 进入到指定目录 | 打开本机目录用lcd 打开远程目录用cd |
⑤ | 下载指定文件 | mget 文件名 |
⑥ | 下载指定类型文件 | mget *.gz 或者 mget *.zip 或者 mget *.tar |
⑦ | 下载指定文件规则,例如:下载以dir开头,并且以.f 的全量文件 或者.i结尾的增量文件 | mget dir.*.i mget dir.*.f |
⑧ | 异常日志输出 | 把常见异常归纳一下,遇到后将异常信息输出到指定目录下面,文件名按照一定规则随即自动生成 |
三、脚本内容
前提:安装lftp yum install lftp
3.1. 案例脚本
#!/bin/bash
fdate=$(date +%Y%m%d%H%M%S)
flog='/app/blacklist/logs/accuitydownload-'
elog='/app/blacklist/logs/errors-'fname=$flog$fdate'.log'
ename=$elog$fdate'.log'lftp -u ftpuser,123456 ftp://192.168.0.110:21 <<EOF > "$fname" 2>&1
set xfer:clobber on
lcd /app/data
cd /send/ods/20201226
mget UPIDGWL.ZIP
by
EOFif grep -i "Login failed" "$fname" > /dev/null
then
echo "ERROR: Login failed" >> "$ename"
fi
if grep -i "Not connected" "$fname" > /dev/null
then
echo "ERROR: Cannot connect to the destination" >> "$ename"
fi
if grep -i "No such file" "$fname" > /dev/null
then
echo "ERROR: Cannot change directory. No such file or directory." >> "$ename"
fi
if grep -i "No such directory" "$fname" > /dev/null
then
echo "ERROR: Cannot change remote directory. No such file or directory." >> "$ename"
fi
if grep -i "File or Directory does not exist" "$fname" > /dev/null
then
echo "ERROR: Cannot transfer. File or Directory does not exist" >> "$ename"
fi
3.2. 案例脚本升级
创建conf文件夹,用来存放配置文件
创建sftp_conn.conf配置文件,内容分隔符 |
mkdir conf
vim ftp_conn.conf
#内容不做限制
192.168.0.110|ftpuser|123456|/send/ods/|21|
升级后的脚本
#!/bin/bash
fdate=$(date +%Y%m%d%H%M%S)
flog='/app/blacklist/logs/accuitydownload-'
elog='/app/blacklist/logs/errors-'fname=$flog$fdate'.log'
ename=$elog$fdate'.log'line=`cat ./conf/ftp_conn.conf`
host=`echo $line|awk -F "|" '{print $1}'`
username=`echo $line|awk -F "|" '{print $2}'`
password=`echo $line|awk -F "|" '{print $3}'`
remote_path=`echo $line|awk -F "|" '{print $4}'`
sftp_port=`echo $line|awk -F "|" '{print $5}'`exec_date=`date -d "0 days ago" +%Y%m%d`
local_datadir=/app/data#echo $line
#echo $host
#echo $username
#echo $password
#echo $remote_path
#echo $exec_date
#echo $local_datadirlftp -u $username,$password ftp://$host:$sftp_port <<EOF > "$fname" 2>&1
set xfer:clobber on
lcd $local_datadir
cd $remote_path/$exec_date
mget UPIDGWL.ZIP
by
EOFif grep -i "Login failed" "$fname" > /dev/null
then
echo "ERROR: Login failed" >> "$ename"
fi
if grep -i "Not connected" "$fname" > /dev/null
then
echo "ERROR: Cannot connect to the destination" >> "$ename"
fi
if grep -i "No such file" "$fname" > /dev/null
then
echo "ERROR: Cannot change directory. No such file or directory." >> "$ename"
fi
if grep -i "No such directory" "$fname" > /dev/null
then
echo "ERROR: Cannot change remote directory. No such file or directory." >> "$ename"
fi
if grep -i "File or Directory does not exist" "$fname" > /dev/null
then
echo "ERROR: Cannot transfer. File or Directory does not exist" >> "$ename"
fi
(企业内部需求实战_03)_shell脚本 sftp协议下载文件
https://gblfy.blog.csdn.net/article/details/103875246