文章目录
- 一、需求文档说明
- 二、脚本解释/说明
- 三、脚本内容
- 3.1. 案例脚本
- 3.2. 案例脚本升级
一、需求文档说明
序号 | 要求 | 说明 |
---|---|---|
① | 协议 | 使用sftp协议远程下载 |
② | 文件类型 | .zip |
③ | 文件名 | UPDATA |
④ | 远程下载目录 | PEDP/ |
⑤ | 本服务器下载存放目录 | /app/xmldata/Lists |
二、脚本解释/说明
脚本拆解 | 释义说明 | 执行命令 |
---|---|---|
① | 日志文件名拼接fname | 存放全部日志目录+随机生成以日期规则.log结尾的文件 |
② | 错误日志拼接elog | 存放异常日志目录+随机生成以日期规则.log结尾的文件 |
③ | sftp连接格式 | lftp -u 用户名,密码 sftp://ip地址:端口 <<EOF > "$fname" 2>&1 |
④ | 进入到指定目录 | 打开本机目录用lcd 打开远程目录用cd |
⑤ | 下载指定文件 | mget 文件名 |
⑥ | 下载指定类型文件 | mget *.gz 或者 mget *.zip 或者 mget *.tar |
⑦ | 下载指定文件规则,例如:下载以dir开头,并且以.f 的全量文件 或者.i结尾的增量文件 | mget dir.*.i mget dir.*.f |
⑧ | 异常日志输出 | 把常见异常归纳一下,遇到后将异常信息输出到指定目录下面,文件名按照一定规则随即自动生成 |
三、脚本内容
3.1. 案例脚本
#!/bin/bash
fdate=$(date +%Y%m%d%H%M%S)
flog='/app/ymjc/logs/download-'
elog='/app/ymjc/logs/errors-'fname=$flog$fdate'.log'
ename=$elog$fdate'.log'#格式:lftp -u 用户名,密码 sftp://ip地址:端口 <<EOF > "$fname" 2>&1
lftp -u mysftp,123456 sftp://192.168.0.110:22 <<EOF > "$fname" 2>&1
set xfer:clobber on
cd /send/ods/20201226
lcd /app/data
mget UPDATA.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: 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 sftp_conn.conf
#内容不做限制
192.168.0.110|mysftp|123456|/send/ods/|22|
升级后的脚本
#!/bin/bash
fdate=$(date +%Y%m%d%H%M%S)
flog='/app/ymjc/logs/download-'
elog='/app/ymjc/logs/errors-'
fname=$flog$fdate'.log'
ename=$elog$fdate'.log'line=`cat ./conf/sftp_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 sftp://$host:$sftp_port <<EOF > "$fname" 2>&1
set xfer:clobber on
cd $remote_path/$exec_date
lcd $local_datadir
mget UPDATA.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: 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