【发布时间】:2014-09-03 13:35:27
【问题描述】:
我需要一些关于 EXPECT 脚本的帮助....
我正在尝试在访问大量主机之前自动登录,并在用户输入错误密码时进行处理。我首先获取用户名和密码,然后针对特定主机进行验证。如果密码无效,我想循环并再次询问用户名和密码。
我正在尝试这个:-
(省略前面几行不相关的行)
while {1} {
send_user "login as:- "
expect -re "(.*)\n"
send_user "\n"
set user $expect_out(1,string)
stty -echo
send_user "password: "
expect -re "(.*)\n"
set password $expect_out(1,string)
stty echo
set host "some-box.here.there.co.uk"
set hostname "some-box"
set host_unknown 0
spawn ssh $user@$host
while {1} {
expect {
"Password:" {send $password\n
break}
"(yes/no)?" {send "yes\n"}
"Name or service not known" {set host_unknown 1
break}
}
}
if {$host_unknown < 1} {
expect {
"$hostname#" {send "exit\r"
break
}
"Password:" {send \003
expect eof
close $spawn_id
puts "Invalid Username or Password - try again..."
}
}
} elseif {$host_unknown > 0} {
exit 0}
}
puts "dropped out of loop"
现在我可以在很多盒子上做很多事情.....
当我输入有效的用户名或密码时,这可以正常工作,并且我的脚本会关闭并执行我想要的所有其他操作,但是当我输入无效密码时,我会得到:-
Fred@Aserver:~$ ./Ex_Test.sh ALL
登录为:- MyID
密码:spawn ssh MyID@some-box.here.there.co.uk
密码:密码: 用户名或密码无效 - 请重试...
登录为:- 找不到名为“exp6”的频道while executing "expect -re "(.*)\n"" invoked from within "if {[lindex $argv 1] != ""} { puts "Too many arguments" puts "Usage is:- Ex_Test.sh host|ALL"} elseif {[lindex $argv 0] != ""} {
while {1} { ..." (file "./Ex_Test.sh" line 3)
“找不到名为“exp6”的频道这句话真的让我很烦。
我做错了什么?我正在阅读 Exploring Expect (Don Lines) 但一无所获......
【问题讨论】: