版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、通过UNIXSHELL却本实现FTP自动传输问题提出:因工作需要,要业务系统要求作完日终后,把数据从主机通过FTP传送到备机。需要分析:1 .每天日终时间不同,所以最好是手工编制脚本,当业务人员日终完成后,手动调用,而不能通过任务调度来实现。2 .每天要传送的数据文件名不同(与日期相关),所以要在脚本中处理文件名。3 .需要业务人员提供的信息越少越好,每天操作,命令多了,出错的机会也多。具体脚本如下:(在ScoOpenServer5.0.让测试通过)。希望对大家有所帮助。#!/bin/sh# 取得年月日YYYY='date"+%Y"'MM='date
2、"+%m"'DD='date"+%d"'filename="$YYYY$MM$DD"# 显示年月日echo"InputBackupDate:($filename)c"# 读取输入,如果是当天日期,可直接回车readfilenameiftest-nfilenamethenecho"BackupDate:$filename"elsefilename="$YYYY$MM$DD"echo"BackupDate:$filename"fi# 取
3、得日期后,写一个FTP脚本#备机地址echo"open1x.xx.xx.x0">ftp.cmd#备机用户,密码echo"userloginnamepassword">>ftp.cmdecho"bin">>ftp.cmdecho"hash">>ftp.cmd#备机目录echo"cd/usr/database">>ftp.cmd#文件名为data20070310echo"putdata$filename">>ftp
4、.cmdecho"close">>ftp.cmdecho"bye">>ftp.cmdcd/usr/database#自动执行ftpcat$HOME/ftp.cmd|ftp-necho"AutoBackup$filenameDataFinished!"自动即脚本(全参数版)#!/bin/sh#=#*#*Copyright(c)2005,dinner3000# *Allrightsreserved.#*# *文件名称:auto_trans.sh# *文件标识:# *摘要:自动即脚本(全参数版)# *作者:dinne
5、r3000# *修改者:# *修改内容:# *修改时间:# *版本:2005-5-12# *$Id$#*#=#localvariablePS_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_EX
6、T/g"'#却本名称PS_DIR='dirname$0'TMP_STR='echo$PS_DIR|awk-F"/"'printf("%s",$1);'、if-z$TMP_STR;thenABS_PATH=$PS_DIRelsecd$PS_DIRABS_PATH='pwd'fiWORK_DIR=$ABS_PATH脚本所在绝对路径LOCAL_DIR='pwd'制始化FTP本地目录#remotevariableREMOTE_IP=""
7、制始化FTP主机地址USER="Anomymous"#初始化FTP帐号PSWD="Anonymous"#初始化FTP密码REMOTE_DIR="/"制始化FTP远端目录BACKUP_DIR="undefined"#W始化文件备份目录FILE_TYPE="*.*"制始化要传送的文件类型FILE_LIST="undefined"酌始化要传送的文件歹U表METHOD="undefined"#初始化FTP传送方向CONN_MODE="passiveoff
8、"#初始化FTP连接模式TRAN_MODE="binary"#初始化FTP传送模式CLEAN="false"猊否清除传送成功的文件#logpathRUN_LOG="$WORK_DIR/$PS_NAME_run.log"#却本运行记录TRANSFER_LOG="$WORK_DIR/$PS_NAME_transfer.log"#FTP送临时记录#10glite()#不换行记录echo-n"$1">>$RUN_LOG2>&1log()换行记录echo"$1
9、">>$RUN_LOG2>&1quit()#正常退出log"=E=N=D='date'=E=N=D="rm-f$PS_LOCKexiterror()#非法退出echo"$1"2>&1log"$1"quit#=whilegetopts:UCDPAh:u:p:r:l:b:t:f:OPTION#分析执行参数docase$OPTIONinh)#FTP主机地址REMOTE_IP=$OPTARG;u)#FTP帐号USER=$OPTARG;p)#FTP密码PSWD=$OPTARG;r
10、)#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="passiveon"A)#FTP传送模式TRAN_MODE="ascii”C)#青除传送成功的文件C
11、LEAN="true";?)#showusageerror"$PS_FULLNAME-U(pload)D(ownload)-C(lean)-P(assive)-A(scii)-hhost-uuser-ppassword-rremotepath-llocalpath-bbackuppath-tfiletype-ffilelist.";esacdonePS_LOCK="$WORK_DIR/$PS_NAME_'echo"$USER:$PSWD$REMOTE_IP$REMOTE_DIR=>$LOCAL_DIR"|md5
12、'.pid"#进程互斥锁,只有参数完全相同才会互斥if$METHOD="undefined"then#FTP传送方向未定义错error"Tansfermode(-U(pload)D(ownload)mustbeset.(1)"fi#initrunloglog""log"#'date'#"log"REMOTE:$USER:$PSWD$REMOTE_IP$REMOTE_DIR”log"LOCAL:$LOCAL_DIR”log"METHOD:$METHOD&
13、quot;log"FILE_TYPE:$FILE_TYPE"log"WORK_DIR:$WORK_DIR"log"PS_LOCK:$PS_LOCK”log"RUN_LOG:$RUN_LOG”log"TRANSFER_LOG:$TRANSFER_LOG"log"#"log""if-f$PS_LOCK;then破程互斥echo"'date':$PS_FULLNAMEalreadyrunning.Exit."2>&1log"
14、;'date':$PS_FULLNAMEalreadyrunning.Exit."2>&1exitelsepsauxw|grep/bin/sh|grep$PS_FULLNAME|grep-vgrep>$PS_LOCKfi#createfilelistif$METHOD="upload"thenif$FILE_LIST="undefined"thenBATCH_OPT="mput$FILE_TYPE”elseBATCH_OPT='sed's/A/put/g'$FILE_LIST
15、'rm-f$FILE_LISTfielif$METHOD="download"thenif$FILE_LIST="undefined"thenBATCH_OPT="mget$FILE_TYPE"elseBATCH_OPT='sed's/A/get/g'$FILE_LIST'rm-f$FILE_LISTfielseerror"Tansfermode(-U(pload)D(ownload)mustbeset.(2)"fi#transferfilescd$WORK_DIR#excu
16、teftpbatchecho"open$REMOTE_IPpromptoffuser$USER$PSWDlcd$LOCAL_DIRcd$REMOTE_DIR$CONN_MODE$TRAN_MODE$BATCH_OPTclosebye"|ftp-v-n|tee$TRANSFER_LOG|sed's/A/>/g'>>$RUN_LOG#执行批量传送,并记录日志TOTAL_TRANSFERED='grep"226Transfercomplete"$TRANSFER_LOG|wc-HW传送数量log"TOTALT
17、RANSFERED:$TOTAL_TRANSFERED”log""#clearorbackupfilesif$METHOD="upload"thenif$BACKUP_DIR!="undefined"then#备份已上传的文件log"Backupupfiles."COUNT=0BATCH_BKUP='grepB3"226Transfercomplete."$TRANSFER_LOGgrep"local:"|awk-F'printf("%sn"
18、;,$2);'、cd$LOCAL_DIRforIin$BATCH_BKUPdomv-v$I$BACKUP_DIR/|sed's/A/>/g'>>$RUN_LOG2>&1COUNT='expr$COUNT+1'donelog"TOTALBACKUPED:$COUNT"log""elseif$CLEAN="true"then#清除已上传的文件log"Removetransferedfiles."COUNT=0BATCH_CLEAN='gre
19、p-B3"226Transfercomplete."$TRANSFER_LOG|grep"local:"|awk-F'printf("%sn",$2);''log"Executelocalclear($LOCAL_DIR)."cd$LOCAL_DIRforIin$BATCH_CLEANdorm-fv$I|sed's/$/deleted./g'>>$RUN_LOG2>&1COUNT='expr$COUNT+1'donelog"
20、TOTALDELETED:$COUNT"log""fifielif$METHOD="download"thenif$CLEAN="true"then#清除已下载的文件log"Executeremoteclear."BATCH_CLEAN='grep-B3"226Transfercomplete."$TRANSFER_LOG|grep"local:"|awk-F'printf("delete%sn",$2);''ec
21、ho"open$REMOTE_IPpromptoffuser$USER$PSWDlcd$LOCAL_DIRcd$REMOTE_DIR$BATCH_CLEANclosebye"|ftp-v-n|tee$TRANSFER_LOG|sed's/A/>/g'>>$RUN_LOG2>&1COUNT='grep"250DELEcommandsuccessful."$TRANSFER_LOG|wc-l'log"TOTALDELETED:$COUNT"log""fie
22、lseerror"Tansfermode(-U(pload)D(ownload)mustbeset.(3)"fiquit#正常退出#=调用方法:auto_trans.sh-U(pload)D(ownload)传送方向,上传或下载,必须指定,且只能指定其一- C(lean)清除已传送的文件(默认不清除)- P(assive)被动模式(默认主动)- A(scii)文本模式(默认二进制)- hhost主机地址(默认)- uuser帐号(默认匿名)- ppassword密码(默认匿名)- rremotepath远端路径(默认根目录)- llocalpath本地路径
23、(默认当前目录)- bbackuppath文件备份目录(默认不备份)- tfiletype要传送的文件类型(默认*.*)- ffilelist要传送的文件列表(默认无)在UNIX环境中,如果需要经常性的大批量FTP,则可以考虑脚本实现。首先,写一个脚本,把所有的要运行的FTP脚本写入,Sample如下:open10.10.10.XX2121userusernamepasswordbinarypromptoffcdXXXXgetXXXXputXXXXbye其中,promptoff是必需的,这样相当于屏蔽掉了所有可能导致job中断的提示信息。写这个脚本时,一定要注意,在get和put时,默认的目录
24、是$HOME,如果不想用这个,要指明。然后,这个脚本时不能直接运行的,因为它不是shell脚本,只是FTP脚本。新建一个脚本,写入下面的语句:#!/bin/shftp-n<$HOME/ftpfile.fsh(假设刚才写的那个脚本存在$HOME下,名为ftpfile.fsh)这个Shell脚本实际上是运行FTP命令,并且使用ftpfile.fsh作为FTP命令的输入。man一下ftp可以知道,-n是避免使用默认连接。-nPreventsanautomaticloginontheinitialconnection.Otherwise,theftpcommandsearchesfora$HOM
25、E/.netrcentrythatdescribestheloginandinitializationprocessfortheremotehost.Seetheusersubcommand.我们已经在ftpfile.fsh中定义了open语句来创建ftp连接,当然不想让ftp命令自动利用$HOME/.netrc中的信息创建初始连接了,那样的话,就要先close那个连接才能创建我们的。我们不知道运行这个脚本时,$HOME/.netrc中有没有初始连接的信息,有了我们也不用,所以需要-n。本文来自CSDN博客,转载请标明出处:下面给出两个范例,供大家参考=来自:,十分感谢作者:deathcult
26、代码:1, #!/bin/shF="xxxx.ftp"echo"open121">$Fecho"userusernamepasswd">>$Fecho"bin">>$Fecho"cd/home/xxx/">>$Fecho"mput$1">>肝echo"bye">>$Fftp-i-in<$Frm-rf$F2,#!/bin/shFILE=$1ftp-i-in<&
27、lt;!open21userusernamepasswordcd/mput$FILEbye!3定时即脚本:转自:引用:1 .编辑.netrc,增加如下一行:machine服务器地址login用户名password密码2 .编辑一个文件.ftp_cmd,存储ftp命令用:代码:lcd本地目录cd远端目录mput*.tbzbye3 .crontab-e,增加一行:10 4*0ftp-i<.ftp_cmd附录:FTP的命令行格式为:ftp-v-d-i-n-g主机名,其中- v显示远程服务器的所有响应信息;- n限制ftp的自动登录,即不使用;.n
28、etrc文件;- d使用调试方式;- g取消全局文件名。FTP使用的内部命令如下(中括号表示可选项):1 .!cmdargs:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip2 .$macro-ameargs:执行宏定义macro-name。3 .accountpassword:提供登录远程系统成功后访问系统资源所需的补充口令。4 .appendlocal-fileremote-file:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。5 .ascii:使用ascii类型传输方式。6 .bell:每个命令执行完毕后计算机响铃一次。7 .bin:
29、使用二进制文件传输方式。8 .bye:退出ftp会话过程。9 .case:在使用mget时,将远程主机文件名中的大写转为小写字母。10 .cdremote-dir:进入远程主机目录。11 .cdup:进入远程主机目录的父目录。12 .chmodmodefile-name:将远程主机文件file-name的存取方式设置为mode,如:chmod777a.out。13 .close:中断与远程服务器的即会话(与open对应)。14 .cr:使用asscii方式传输文件时,将回车换行转换为回行。15 .deleteremote-file:删除远程主机文件。16 .debugdebug-value:设
30、置调试方式,显示发送至远程主机的每条命令,如:debup3,若设为0,表示取消debug。17 .dirremote-dirlocal-file:显示远程主机目录,并将结果存入本地文件18 .disconnection:同close。19 .formformat:将文件传输方式设置为format,缺省为file方式。20 .getremote-filelocal-file:将远程主机的文件remote-file传至本地硬盘的local-file。21 .glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。22 .hash:每传输1024字节,显
31、示一个hash符号(#)。23 .helpcmd:显示ftp内部命令cmd的帮助信息,如:helpget。24.idleseconds:将远程服务器的休眠计时器设为seconds秒。25.image:设置二进制传输方式(同binary)。26.lcddir:将本地工作目录切换至dir。27.lsremote-dirlocal-file:显示远程目录remote-dir,并存入本地文件local-fileo28 .macdefmacro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。29 .mdeleteremote-file:删除远程主机文件。30 .mdirremote-fi
32、leslocal-file:与dir类似,但可指定多个远程文件,如:mdir*.o.*.zipoutfile。31 .mgetremote-files:传输多个远程文件。32 .mkdirdir-name:在远程主机中建一目录。33 .mlsremote-filelocal-file:同nlist,但可指定多个文件名。34 .modemodename:将文件传输方式设置为modename,缺省为stream方式。35 .modtimefile-name:显示远程主机文件的最后修改时间。36 .mputlocal-file:将多个文件传输至远程主机。37 .newerfile-name:如果远程
33、机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。38 .nlistremote-dirlocal-file:显示远程主机目录的文件清单,并存入本地硬盘的local-fileo39 .nmapinpatternoutpattern:设置文件名映射机制,使得文件传输时,文件中的某些字符相互转换,如:nmap$1.$2.$3$1,$2.$2,$3,则传输文件a1.a2.a3时,文件名变为a1,a2o该命令特别适用于远程主机为非UNIX机的情况。40 .ntransincharsoutchars:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR41.openhostport:建立指定ftp服务器连接,可指定连接端口。42 .passive:进入被动传输方式。43 .prompt:设置多个文件传输时的交互提示。44 .proxyftp-cmd:在次要控制连接中,执行一条ftp命令,该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。45 .p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地热能源打井施工合同模板
- 宾馆餐饮部炊事人员招聘协议
- 铁路给水设施改造施工协议
- 消防队电工设施保障招聘合同
- 学校卫生维护合同
- 商场喷淋管道施工协议
- 住宅小区散水施工合同
- 企业信息安全风险管理协议
- 高校交通运输采购合同规范
- 主题公园花园施工合同样本
- 分配利润合同范例
- 《中国丧葬礼仪》课件
- 华为ICT大赛(网络赛道)高频备考试题及答案
- 2024年1月福建高中学业水平合格考物理试卷真题(含答案解析)
- 昆明理工大学《自然语言处理》2023-2024学年第一学期期末试卷
- 中国高血压防治指南(2024年修订版)解读课件
- 国家开放大学《统计与数据分析基础》形考任务1-5答案
- 专项15-分式方程的应用-八大题型
- 北京市海淀区2023-2024学年五年级上学期数学期末试卷
- 2024时事政治考试题库(100题)
- 核反应堆热工分析课程设计
评论
0/150
提交评论