shell脚本编程-例子_使用expect下载ftp文件
expecthi一种能够按照脚本内容设定的方式和交互程序进行“对话”的程序
由于linux中的一些命令不太适合脚本化的自动运行,比如fdisk、telnet、ftp连接下载等,所以就必须使用expect来解决这些场景下的自动化运行问题。
系统默认没有装ftp、expect命令,需要自己先进行yum安装(也可手工安装)
脚本事例(expect.exp)如下:
#!/usr/bin/expect set ip [ lindex $argv 0 ] #脚本的第一个参数,远程主机的IP地址 set file [ lindex $argv 1 ] #脚本的第二个参数,指定下载的文件名 set timeout 10 #设置超时时间 spawn ftp $ip #执行ftp $ip命令 expect "Name*" #如果出现Name字符 send "anonymous\n" #则输入anoymous并回车 expect "Password*" #如果出现Password字符 send "\n" #则仅输入回车 expect "fpt>*" #如果出现ftp字符 send "get $file\n" #则发送get $file命令 expect { #如果返回的字符串含有received则说明下载成功 "*received*" { send_user "Download successful!";send "quit\n" } #如果返回的字符串中含有Faild则说明下载失败. "*Failed*" { send_user "Download failed!";send "quit\n"} } expect eof
赋予执行权限:chmod 774 ./expect.exp
执行本脚本是可以使用如下语句:
./expect.exp 195.92.253.2 robots.txt
如果你执行成功应该出现如下语句:
[cos@localhost shell]$ ./expect.exp 195.92.253.2 robots.txt spawn ftp 195.92.253.2 Connected to 195.92.253.2 (195.92.253.2). 220 (vsFTPd 2.3.4) Name (195.92.253.2:cos): anonymous 331 Please specify the password. Password: 230-Welcome to ZenIV 230- 230-The software on this site is made available for free without warranty or 230-other right of recourse implied or otherwise. No statement save one in 230-writing by the owner of the system changes this usage agreement. This 230-software is provided in the United Kingdom for United Kingdom users, 230-any export download is at your own risk and liability. 230- 230-Many parts of this archive are mirrors of other sites. While we try not 230-to mirror any inappropriate material we do not have editorial control over 230-such mirrors and cannot make such a guarantee. 230- 230-There is no other user agreement, should your local law make such an 230-agreement invalid you are prohibited from using this site, and may be 230-committing an offence under the computer misuse act by continuing. 230- 230-By downloading any file from this site you agree to these terms and 230-conditions, disconnect now if you do not. 230- 230-* * * * * * * * * * * * * Transfer Problems ? * * * * * * * * * * * * * 230-* * 230-* If you are having problems accessing this site, then please use * 230-* "passive" transfer mode rather than "port" transfer mode. Thanks. * 230-* * 230-* Note: do **NOT** try using download accelerators like aria2c which * 230-* make multiple connections, this will likely trigger an * 230-* autonatic ban respons which you will have to request to be * 230-* removed * 230-* * 230-* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> get robots.txt local: robots.txt remote: robots.txt 227 Entering Passive Mode (195,92,253,2,70,227). 150 Opening BINARY mode data connection for robots.txt (103 bytes). 226 Transfer complete. 103 bytes received in 0.000627 secs (164.27 Kbytes/sec) ftp> Download successful!quit 221 Goodbye.
祝你好运。
2015年10月16日00:33:59