每天省中心做完批处理之后,生成每个网点的报表,需要分发到各个网点,将报表放到其所属联社银行前置机上,此程序就是用来自动转发报表,在Linux中设定任务,在固定的时候发送到各联社前置机上
程序由三部分组成:man_dispense rpt_dispense.cfg rpt_dispense.sh
man_dispense -- 根据rpt_dispense.sh和rpt_dispense.cfg组合一些参数信息
rpt_dispense.cfg -- 用来存储各联社前置机登陆密码,一些配置表
rpt_dispense.sh -- 运行主shell程序
rpt_dispense.cfg内容
111 user1 pwd1 ip1/host1 #联社1 联社号 用户名 密码 ip地址/host名字
222 user2 pwd2 ip2/host2 #联社2
333 user3 pwd3 ip3/host3 #联社3
rpt_dispense.sh代码
#!/bin/ksh
#使用方法 sh rpt_dispense.sh 20040808(date)
if [ $# -lt 1 ]
then
echo "使用方法 sh rpt_dispense.sh 20040808"
exit 1
fi
date=$1 #把第一个参数赋值给date变量(1)
echo "开始下发"
while read line #按行读取一行,放入到line变量中
do
echo "开始下发"
echo $cd #显示联社号
cd=`echo $line|cut -d " " -f1` #此行按" "(一个空格)分隔的第一个参数
user=`echo $line|cut -d " " -f2` #第二个为用户名,`在1左边,表示执行
passwd=`echo $line|cut -d " " -f3` #第三个为密码
host=`echo $line|cut -d " " -f4` #第四个为HOST/IP
#运行man_dispense程序,参数带入,并且指定错误日志,&表示后台运行
sh man_dispense $cd $user $passwd $host $date 1>>rpt.log 2>>rpt.err &
sleep 5 #系统等待5秒
done <rpt_dispense.cfg #输入文本为rpt_dispense.cfg
man_dispense代码
#!/bin/ksh
#This program is for auto tar the rpt,and use ftp to send the file.
#You have to manual enter the date of rpt which you want.
cd=$1 #第一个参数为联社号
user=$2 #第二个参数为用户名
passwd=$3 #第三个参数为密码
host=$4 #第四个参数为HOST名字/IP地址
d=$5 #第五个参数为日期
filename=$1_$5 #需要打包的文件名为 联社号_日期
cd /rptpath #到报表路径位置
tar cf rpt_$filename.tar ./$cd*/*$d* #tar成包,不加参数v显示
gzip -f rpt_$filename.tar #压缩此tar文件
ftp -ni <<+ #采用命令方式使用FTP,类似sqlplus <<! ... !
open $host #连接到host
user $user $passwd #用户名密码
umask 000 #待查ftp命令
bin #采用二进制传输
cd /rptpath #进入远端报表路径
put rpt_$filename.tar.gz #上传文件
bye #断开连接
+ #FTP命令结束
(sleep 5;echo $user;
sleep 1;echo $passwd;
sleep 2;echo "cd /rptpath"
sleep 2;echo "tar xvfz rpt_$filename.tar.gz &";
sleep 5;echo "exit";
sleep 2)| telnet $host #经典之处
echo $cd
echo "完成"
在1处,可以这样更为动态地选择日期
DBUSER=dbuser;
DBPASS=dbpwd;
sqlplus "${DBUSER}/${DBPASS}" << ! >/dev/null
set pagesize 0;
set long 90000;
set feedback off;
spool /tmp/tmp.txt;
select date from tablename where condition;
spool off;
exit;
!
grep -v "^SQL" /tmp/tmp.txt >/tmp/date.txt
date=`cat /tmp/date.txt|cut -c1-8`
echo "下发日期"
echo $date