作文最后一个人续写:EXPECT
来源:百度文库 编辑:偶看新闻 时间:2024/05/10 10:58:41
EXPECT
(2009-08-11 14:54:40) 转载标签:expect
语法
编程注意事项
分类: perl,cgi,shell脚本编程linux上
[root@str0121bk RPMS]# rpm -ivh expect-5.38.0-74.i386.rpm
warning: expect-5.38.0-74.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
error: Failed dependencies:
expect-5.43.0-sol10-x86-local.gz Expect is a program that performs programmed dialogue with other interactive programs
- installs in /usr/local. You should also get tcl-8.5a4 , tk-8.5a4 and, if you don't have gcc installed, libgcc.
spawn telnet 192.168.1.12
expect “
send “
send_user “
set timeout 5
expect timeout
expect eof
expect {
}
expect "*$*"
send "exit\n"expect {
spawn ftp 10.1.1.1
...
expect timeout
exit
由于expect脚本是顺序执行的,那么当程序执行到这个expect timeout的时候就会阻塞,程序会一直等待到timeout然后退出
timeout exit
Connect
}
换成括号,timeout只要被辨认,就会执行后面的exit
比如FTP SERVER连接不上时,仍执行自动FTP 脚本
set timeout 3
spawn ftp 192.168.1.11
ftp: connect: Connection refused
ftp> macg
Invalid command
ftp> 008421
bin
Invalid command
ftp> ftp> Not connected.
ftp> get asian_0264_4.mpg
Not connected.
ftp> quit
success
定义在前
proc name {参数1 参数2} {
command
command
}
引用在后
name 参数1值
spawn ftp [index $argv 1]
expect "*Name*"
send "anonymous "
expect "*Password:*"
send [exec whoami]
expect "*ok*ftp>*"
send "get [index $argv 2] "
expect "*ftp>*"
for {} {1} {} {
expect
eofbreak
"*UNREF FILE*CLEAR?"{send "r "}
"*BAD INODE*FIX?"{send "y "}
"*?"{send "n "}
}
for {} {1} {}{
expect
eofbreak
"*UNREF FILE*CLEAR?"{send "y "}
"*BAD INODE*FIX?"{send "y "}
"*?"{interact +}
}在这个版本里面,如果脚本遇到了”?”执行interact命令把控制交给用户
此时用户的手工输入击键交给fsck处理。
当执行完后,用户可以通过按"+"键来退出或者把控制交还给expect
=================================expect编程注意事项=======================================
正规的回车是\n ,注意是反杠,参数杠,不是目录杠
$ vi expecttest
#!/usr/bin/expect
set timeout 3
spawn telnet 192.168.1.12
expect "*login:*"
exec sleep 1
send "test\n"
expect "*Password:*"
exec sleep 1
send "008421\n"
expect "*test*"
exec sleep 1
也可以用直接用回车,缺陷是带换行,使send语句分到两行中
#!/usr/bin/expect
set timeout 3
spawn telnet 192.168.1.12
expect "*login:*"
exec sleep 1
send "test
"
expect "*Password:"
exec sleep 1
send "008421
"
expect "*[test*" 想匹配[test@localhost ~]$系统报错
missing close-bracket
"expect "*[test*"
[test@localhost ~]$ uname -p
i686
[test@localhost ~]$ pwd
/home/test
[test@localhost ~]$ ls -l
total 4
expect 没有抑制后边send指令的机能
所以只能人为加 sleep 指令
expect "ftp>"
send "bin\n"
exec sleep 1
send "get asian_0264_4.mpg\n"
exec sleep 1
expect "ftp>"
send "quit\n"
ftp> get asian_0264_4.mpg
local: asian_0264_4.mpg remote: asian_0264_4.mpg
227 Entering Passive Mode (192,168,1,11,4,10).
150 Opening data connection for asian_0264_4.mpg.
quit
226 Transfer complete.
send "bin\n"
exec sleep 1
send "get asian_0264_4.mpg\n"
exec sleep 4
expect "ftp>"
send "quit\n"
ftp> bin
200 Type set to I.
ftp> get asian_0264_4.mpg
local: asian_0264_4.mpg remote: asian_0264_4.mpg
227 Entering Passive Mode (192,168,1,11,4,11).
150 Opening data connection for asian_0264_4.mpg.
226 Transfer complete.
1269764 bytes received in 1.4 seconds (8.6e+02 Kbytes/s)
ftp> quit
221 Goodbye!