irpas技术客

expect脚本自动连接ftp服务器下载文件_zhanggd57_expect 下载

未知 2455

#!/usr/bin/expect #根据文件名从ftp下载文件到指定目录 #远程主机的IP地址 set ip 192.168.1.1 #登陆密码 set password ABC123 #设置超时时间 set timeout 10 #需要下载的文件名 set file test.txt #ftp服务器上文件所在路径 set ftpPath /home/file #文件下载到本地的路径 set localPath /opt/ #执行ftp $ip命令 spawn ftp $ip #如果出现Name字符 expect "Name*" #则输入ftp登陆的用户名并回车 send "user\n" #如果出现Password字符 expect "Password*" #则输入密码并回车 send "$password\n" #如果出现ftp字符 expect "ftp>*" #切换本地路径 send "lcd $localPath\n" #切换到ftp文件所在目录 send "cd $ftpPath\n" #发送get $file命令 send "get $file\n" expect { #如果返回的字符串含有received则说明下载成功 "*received*" { send_user "Download successful!";send "quit\n"} #如果返回的字符串中含有Failed则说明下载失败 "*Failed*" { send_user "Download failed!";send "quit\n"} } expect eof

1.expect脚本环境中设置shell命令变量

set today [exec date +%Y%m%d]

相当于下面的shell脚本代码

set today `date +%Y%m%d`

shell命令执行结果为当前时间,格式yyyyMMdd,如:20220409

2.expect脚本设置执行参数

#脚本的第一个参数,远程主机的IP地址 set ip [ lindex $argv 0 ] #脚本的第二个参数,登陆密码 set password [ lindex $argv 1 ]

上面代码表示该expect脚本执行,需要两个参数,分别为ip和密码,执行方法为:

./test.exp $ip $password

3.下载json_search开头的文件(json_search*.txt)

#显示ftp当前目录下的所有文件,相当于ls send "nlist\n" #如果出现json_search expect "json_search*" #获取json开头的文件名,赋值file变量 set file $expect_out(0,string) #发送get $file命令 send "get $file\n"

4.下载指定文件夹下面所有文件夹中的指定文件

比如:ftp上面mediaKsj文件夹下面有一些省份文件夹,201,202...210表示省份编码,分别是不同省份的文件夹,每个省份文件夹下面有json_search文件,目标下载所有省份的json_search文件到本地

/home/mediaKsj 201 json_search_201.txt 202 json_search_202.txt ... 210 json_search_210.txt

通过expect脚本遍历下载,本地脚本所在目录存放一个carrierId.txt文件,存放上面的所有省份编码

#获取省份文件行数 set line [exec cat ./carrierId.txt | wc -l] #定义数组变量存放所有省份编码 set carrierIdArr(0) 0 #遍历省份文件,本地创建文件夹,并赋值上面的数组 for {set i 1} {$i <= $line} {incr i} { set carrierId [exec head -n $i ./carrierId.txt | tail -1] set mkdir [exec mkdir -p $mediaPath/$carrierId] set carrierIdArr($i) $carrierId }

carrierId.txt文件内容:

201 202 ... 210

注:expect每次执行命令前都要加expect命令,不然脚本命令会错乱执行!


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #expect #下载 #IP #19216811登陆密码set #password #ABC123设置超时时间set #Timeout