2011-10-17 130 views
6

我一直在试图建立一个期望脚本如果有对期望的命令没有多种可能性通过telnet期待脚本来自动telnet登录

自动登录到我的设备,脚本工作正常,登录到设备。

#!/usr/bin/expect 
set timeout 20 
set ip [lindex $argv 0] 
set port [lindex $argv 1] 
set user [lindex $argv 2] 
set password [lindex $argv 3] 

spawn telnet $ip $port 
expect "'^]'." sleep .1; 
send "\r"; 
sleep .1; 
expect "login:" 
send "$user\r" 
expect "Password:" 
send "$password\r"; 
interact 

上面的脚本正常工作,并成功登录时,我传递正确的参数。但是,一旦我添加额外的分支(用于错误处理)到期望命令,脚本卡住login:提示。一段时间后,它打印Script Error 任何帮助?下面的错误脚本。

#!/usr/bin/expect 
set timeout 20 
set ip [lindex $argv 0] 
set port [lindex $argv 1] 
set user [lindex $argv 2] 
set password [lindex $argv 3] 

spawn telnet $ip $port 
expect "'^]'." 
sleep .1; 
send "\r"; 
expect 
{ 
    "login:" 
    { 
     send "$user\r" 
     expect "Password:" 
     send "$password\r"; 
     interact 

    } 

    "host: Connection refused" 
    { 
    send_user "ERROR:EXITING!" 
    exit 
    } 

} 

PS:该脚本将被进一步发展,以等待附加提示在装置上加载不同的构建图像。只有telnet(控制台)连接有效。所以ssh不是一个选项。

+0

小心分享一次登录后如何传递附加命令?我无法通过这个障碍:http://stackoverflow.com/questions/11148832/shell-script-successful-telnet-login-how-to-issue-commands-after-that – TryTryAgain

+1

如果你在谈论通过脚本自动执行shell中的其他命令。你应该使用发送命令。交互将球传递给用户。从你张贴的问题,我看到你已经得到了答案。 :)期待赢得.. – woodstok

回答

4

我的不好。 问题在于花括号。他们应该和预期的命令在同一条线上。