期望脚本自动telnet登录

woo*_*tok 8 telnet expect

我一直在尝试创建一个期望脚本,通过telnet自动登录我的设备

如果expect命令没有多种可能性,则脚本工作正常,登录到设备.

#!/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
Run Code Online (Sandbox Code Playgroud)

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

#!/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
  }

}
Run Code Online (Sandbox Code Playgroud)

PS:此脚本将进一步开发以等待其他提示在设备上加载不同的构建映像.只有telnet(控制台)连接有效.所以ssh不是一个选择.

woo*_*tok 5

我的错.问题出在花括号上.它们应该与expect命令位于同一行.