通过UNIX SHELL脚本实现FTP自动传输.doc_第1页
通过UNIX SHELL脚本实现FTP自动传输.doc_第2页
通过UNIX SHELL脚本实现FTP自动传输.doc_第3页
通过UNIX SHELL脚本实现FTP自动传输.doc_第4页
通过UNIX SHELL脚本实现FTP自动传输.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通过UNIX SHELL脚本实现FTP自动传输问题提出:因工作需要,要业务系统要求作完日终后,把数据从主机通过FTP传送到备机。需要分析:1.每天日终时间不同,所以最好是手工编制脚本,当业务人员日终完成后,手动调用,而不能通过任务调度来实现。2.每天要传送的数据文件名不同(与日期相关),所以要在脚本中处理文件名。3.需要业务人员提供的信息越少越好,每天操作,命令多了,出错的机会也多。具体脚本如下:(在 Sco Open Server 5.0.x 上测试通过)。希望对大家有所帮助。#!/bin/sh取得年月日YYYY=date +%YMM=date +%mDD=date +%dfilename=$YYYY$MM$DD显示年月日echo Input Backup Date: ($filename) c读取输入,如果是当天日期,可直接回车read filenameif test -n filenamethenecho Backup Date: $filenameelsefilename=$YYYY$MM$DDecho Backup Date: $filenamefi取得日期后,写一个FTP脚本#备机地址echo open 1x.xx.xx.x0 ftp.cmd#备机用户,密码echo user loginname passwordftp.cmdecho binftp.cmdecho hashftp.cmd#备机目录echo cd /usr/databaseftp.cmd#文件名为 data20070310echo put data$filenameftp.cmdecho closeftp.cmdecho byeftp.cmdcd /usr/database#自动执行ftpcat $HOME/ftp.cmd|ftp -necho Auto Backup $filename Data Finished!自动ftp脚本(全参数版)#!/bin/sh#=#*#* Copyright (c) 2005, dinner3000#* All rights reserved.#*#* 文件名称:auto_trans.sh#* 文件标识:#* 摘 要:自动ftp脚本(全参数版)#* 作 者:dinner3000#* 修 改 者:#* 修改内容:#* 修改时间:#* 版 本:2005-5-12#* $Id$#*#=#local variablePS_FULLNAME=basename $0 #脚本全名PS_EXT=echo $PS_FULLNAME |awk -F. if(index($0,.)=0)printf();elseprintf(%s,$NF) #脚本扩展名PS_NAME=echo $PS_FULLNAME |sed s/.$PS_EXT/g #脚本名称PS_DIR=dirname $0TMP_STR=echo $PS_DIR |awk -F/ printf(%s,$1);if -z $TMP_STR ; thenABS_PATH=$PS_DIRelsecd $PS_DIRABS_PATH=pwdfiWORK_DIR=$ABS_PATH #脚本所在绝对路径LOCAL_DIR=pwd #初始化FTP本地目录#remote variableREMOTE_IP= #初始化FTP主机地址USER=Anomymous #初始化FTP帐号PSWD=A #初始化FTP密码REMOTE_DIR=/ #初始化FTP远端目录BACKUP_DIR=undefined #初始化文件备份目录FILE_TYPE=*.* #初始化要传送的文件类型FILE_LIST=undefined #初始化要传送的文件列表METHOD=undefined #初始化FTP传送方向CONN_MODE=passive off #初始化FTP连接模式TRAN_MODE=binary #初始化FTP传送模式CLEAN=false #是否清除传送成功的文件#log pathRUN_LOG=$WORK_DIR/$PS_NAME_run.log #脚本运行记录TRANSFER_LOG=$WORK_DIR/$PS_NAME_transfer.log #FTP传送临时记录#-loglite() #不换行记录echo -n $1 $RUN_LOG 2&1log() 换行记录echo $1 $RUN_LOG 2&1quit() #正常退出log =E=N=D=date=E=N=D=rm -f $PS_LOCKexiterror() #非法退出echo $1 2&1log $1quit#=while getopts :UCDPAh:u:p:r:l:b:t:f: OPTION #分析执行参数docase $OPTION inh) #FTP主机地址REMOTE_IP=$OPTARG;u) #FTP帐号USER=$OPTARG;p) #FTP密码PSWD=$OPTARG;r) #FTP远端目录REMOTE_DIR=$OPTARG;l) #FTP本地目录LOCAL_DIR=$OPTARG;b) #文件备份目录BACKUP_DIR=$OPTARG;t) #要传送的文件类型FILE_TYPE=$OPTARG;f) #要传送的文件列表FILE_LIST=$OPTARG;U) #FTP传送方向(上传)METHOD=upload;D) #FTP传送方向(下载)METHOD=download;P) #FTP连接模式CONN_MODE=passive on;A) #FTP传送模式TRAN_MODE=ascii;C) #清除传送成功的文件CLEAN=true;?)#show usageerror $PS_FULLNAME -U(pload) D(ownload) -C(lean) -P(assive) -A(scii) -h host -u user -p password -r remote path -l local path -b backup path -t filetype -f file list.;esacdonePS_LOCK=$WORK_DIR/$PS_NAME_echo $USER:$PSWD$REMOTE_IP$REMOTE_DIR = $LOCAL_DIR |md5.pid #进程互斥锁, 只有参数完全相同才会互斥if $METHOD = undefined ; then #FTP传送方向未定义错error Tansfer mode(-U(pload) D(ownload) must be set.(1)fi#-#init run loglog log #date#log REMOTE: $USER:$PSWD$REMOTE_IP$REMOTE_DIRlog LOCAL: $LOCAL_DIRlog METHOD: $METHODlog FILE_TYPE: $FILE_TYPElog WORK_DIR: $WORK_DIRlog PS_LOCK: $PS_LOCKlog RUN_LOG: $RUN_LOGlog TRANSFER_LOG: $TRANSFER_LOGlog #log if -f $PS_LOCK ; then #进程互斥echo date: $PS_FULLNAME already running. Exit. 2&1log date: $PS_FULLNAME already running. Exit. 2&1exitelseps auxw |grep /bin/sh |grep $PS_FULLNAME |grep -v grep $PS_LOCKfi#-#create file listif $METHOD = upload ; thenif $FILE_LIST = undefined ; thenBATCH_OPT=mput $FILE_TYPEelseBATCH_OPT=sed s/put /g $FILE_LISTrm -f $FILE_LISTfielif $METHOD = download ; thenif $FILE_LIST = undefined ; thenBATCH_OPT=mget $FILE_TYPEelseBATCH_OPT=sed s/get /g $FILE_LISTrm -f $FILE_LISTfielse error Tansfer mode(-U(pload) D(ownload) must be set.(2)fi#transfer filescd $WORK_DIR#excute ftp batchecho open $REMOTE_IPprompt offuser $USER $PSWDlcd $LOCAL_DIRcd $REMOTE_DIR$CONN_MODE$TRAN_MODE$BATCH_OPTclosebye |ftp -v -n |tee $TRANSFER_LOG |sed s/g $RUN_LOG #执行批量传送, 并记录日志TOTAL_TRANSFERED=grep 226 Transfer complete $TRANSFER_LOG |wc -l #统计传送数量log TOTAL TRANSFERED: $TOTAL_TRANSFEREDlog #clear or backup filesif $METHOD = upload ; thenif $BACKUP_DIR != undefined ; then #备份已上传的文件log Backup up files . COUNT=0BATCH_BKUP=grep -B 3 226 Transfer complete. $TRANSFER_LOG |grep local: |awk -F printf(%sn,$2);cd $LOCAL_DIRfor I in $BATCH_BKUPdomv -v $I $BACKUP_DIR/ |sed s/g $RUN_LOG 2&1COUNT=expr $COUNT + 1donelog TOTAL BACKUPED: $COUNTlog elseif $CLEAN = true ; then #清除已上传的文件log Remove transfered files . COUNT=0BATCH_CLEAN=grep -B 3 226 Transfer complete. $TRANSFER_LOG |grep local: |awk -F printf(%sn,$2);log Execute local clear($LOCAL_DIR) . cd $LOCAL_DIRfor I in $BATCH_CLEANdorm -fv $I |sed s/$/ deleted./g $RUN_LOG 2&1COUNT=expr $COUNT + 1donelog TOTAL DELETED: $COUNTlog fifielif $METHOD = download ; thenif $CLEAN = true ; then #清除已下载的文件log Execute remote clear . BATCH_CLEAN=grep -B 3 226 Transfer complete. $TRANSFER_LOG |grep local: |awk -F printf(delete %sn,$2);echo open $REMOTE_IPprompt offuser $USER $PSWDlcd $LOCAL_DIRcd $REMOTE_DIR$BATCH_CLEANclosebye |ftp -v -n |tee $TRANSFER_LOG |sed s/g $RUN_LOG 2&1COUNT=grep 250 DELE command successful. $TRANSFER_LOG |wc -llog TOTAL DELETED: $COUNTlog fielseerror Tansfer mode(-U(pload) D(ownload) must be set.(3)fiquit #正常退出#=调用方法:auto_trans.sh-U(pload) D(ownload)传送方向, 上传或下载, 必须指定, 且只能指定其一-C(lean)清除已传送的文件(默认不清除)-P(assive)被动模式(默认主动)-A(scii)文本模式(默认二进制)-h host主机地址(默认)-u user帐号(默认匿名)-p password密码(默认匿名)-r remote path远端路径(默认根目录)-l local path本地路径(默认当前目录)-b backup path文件备份目录(默认不备份)-t filetype要传送的文件类型(默认*.*)-f file list要传送的文件列表(默认无)在UNIX环境中,如果需要经常性的大批量FTP,则可以考虑脚本实现。首先,写一个脚本,把所有的要运行的FTP脚本写入,Sample如下:open 10.10.10.XX 2121user username passwordbinaryprompt offcd XXXXget XXXXput XXXXbye其中,prompt off是必需的,这样相当于屏蔽掉了所有可能导致job中断的提示信息。写这个脚本时,一定要注意,在get和put时,默认的目录是$HOME,如果不想用这个,要指明。然后,这个脚本时不能直接运行的,因为它不是shell脚本,只是FTP脚本。新建一个脚本,写入下面的语句:#!/bin/shftp -n $F echo user username passwd $F echo bin $F echo cd /home/xxx/ $F echo mput $1 $F echo bye $F ftp -i -in $F rm -rf $F 2,#!/bin/sh FILE=$1 ftp -i -in ! open 21 user username password cd / mput $FILE bye !3定时ftp脚本: 转自:引用:1.编辑.netrc,增加如下一行: machine 服务器地址 login 用户名 password 密码 2.编辑一个文件.ftp_cmd,存储ftp命令用: 代码:lcd 本地目录 cd 远端目录 mput *.tbz bye3.crontab -e,增加一行: 10 4 * * 0 ftp -i .ftp_cmd附录:FTP的命令行格式为: ftp -v -d -i -n -g 主机名 ,其中 -v 显示远程服务器的所有响应信息; -n 限制ftp的自动登录,即不使用;.n etrc文件; -d 使用调试方式; -g 取消全局文件名。 FTP使用的内部命令如下(中括号表示可选项): 1.!cmdargs:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip 2.$ macro-ameargs: 执行宏定义macro-name。 3.accountpassword: 提供登录远程系统成功后访问系统资源所需的补充口令。 4.append local-fileremote-file:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。 5.ascii:使用ascii类型传输方式。 6.bell:每个命令执行完毕后计算机响铃一次。 7.bin:使用二进制文件传输方式。 8.bye:退出ftp会话过程。 9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。 10.cd remote-dir:进入远程主机目录。 11.cdup:进入远程主机目录的父目录。 12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。 13.close:中断与远程服务器的ftp会话(与open对应)。 14.cr:使用asscii方式传输文件时,将回车换行转换为回行。 15.delete remote-file:删除远程主机文件。 16.debugdebug-value:设置调试方式, 显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。 17.dirremote-dirlocal-file:显示远程主机目录,并将结果存入本地文件 18.disconnection:同close。 19.form format:将文件传输方式设置为format,缺省为file方式。 20.get remote-filelocal-file: 将远程主机的文件remote-file传至本地硬盘的local-file。 21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。 22.hash:每传输1024字节,显示一个hash符号(#)。 23.helpcmd:显示ftp内部命令cmd的帮助信息,如:help get。 24.idleseconds:将远程服务器的休眠计时器设为seconds秒。 25.image:设置二进制传输方式(同binary)。 26.lcddir:将本地工作目录切换至dir。 27.lsremote-dirlocal-file:显示远程目录remote-dir, 并存入本地文件local-file。 28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。 29.mdeleteremote-file:删除远程主机文件。 30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如 :mdir *.o.*.zipoutfile 。 31.mget remote-files:传输多个远程文件。 32.mkdir dir-name:在远程主机中建一目录。 33.mls remote-file local-file:同nlist,但可指定多个文件名。 34.modemodename:将文件传输方式设置为modename, 缺省为stream方式。 35.modtime file-name:显示远程主机文件的最后修改时间。 36.mput local-file:将多个文件传输至远程主机。 37.newer file-name: 如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。 38.nlistremote-dirlocal-file:显示远程主机目录的文件清单,并存入本地硬盘的local-file。 39.nmapinpattern outpattern:设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换, 如:nmap $1.$2.$3$1,$2.$2,$3,则传输文件a1.a2.a3时,文件名变为a1,a2。 该命令特别适用于远程主机为非UNIX机的情况。 40.ntransincharsoutchars:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。 41.open hostport:建立指定ftp服务器连接,可指定连接端口。 42.passive:进入被动传输方式。 43.prompt:设置多个文件传输时的交互提示。 44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。 45.put local-fileremote-file:将本地文件local-file传送至远程主机。 46.pwd:显示远程主机的当前工作目录。 47.quit:同bye,退出ftp会话。 48.quote arg1,arg2.:将参数逐字发至远程ftp服务器,如:quote syst. 49.recv remote-filelocal-file:同get。 50.reget remote-filelocal-fil

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论