做出预期回报的决定



我正在尝试创建一个期望脚本,该脚本将基于"期望"

发送不同的密码字符串
  • 条件A:如果尚未使用用户名设置Cisco设备,则第一个提示将只是"密码:" - 然后应该使用passworda(否用户名)

  • 条件B:如果已使用用户名进行了设置,则提示将为"用户名:",其次是"密码:" - 然后它应该使用用户名和passwordb

#!/bin/bash
# Declare host variable as the input variable
host=$1 
 # Start the expect script
(expect -c "
set timeout 20
# Start the session with the input variable and the rest of the hostname
spawn telnet $host
set timeout 3 
if {expect "Password:"} {
send "PasswordA"}
elseif { expect "Username:"}
send "UsersNamer"}
expect "Password:"
log_user 0 
send "PasswordBr"
log_user 1
expect "*>"
# send "show versionr"
# set results $expect_out(buffer) 
#expect "Password:"
#send "SomeEnablePasswordr"
# Allow us to interact with the switch ourselves
# stop the expect script once the telnet session is closed
send "quitr"
expect eof
")

你做错了。:)

expect语句看上去并不是要查看首先发生的事情,它等待它看到了您的要求(如果它没有及时到达),然后运行一个命令,您传递给它。我认为您可以使用它的方式,但是它不好。

expect可以列出替代方案的列表,例如C switch语句或Shell case语句,这就是您在这里需要的。

您想要的应该看起来像这样:

expect {
  -ex "Username:" {
    send "UsersNamer"
    expect -ex "Password:" {send "PasswordBr"}
  }
  -ex "Password:" {send "PasswordAr"}
}

用文字期望会寻找"用户名:"或"密码:"( -ex表示精确匹配,无regexp),以先到者为准,并运行与之关联的命令。


回答评论,我将尝试使用第二个密码(假设成功登录给出了"#"提示):

expect {
  -ex "Username:" {
    send "UsersNamer"
    expect -ex "Password:" {send "PasswordBr"}
  }
  -ex "Password:" {
    send "PasswordA1r"
    expect {
      -ex "Password:" {send "PasswordA2r"}
      -ex "#" {}
    }
  }
}

you 可以在不寻找#提示的情况下进行,但是您必须依靠第二个Password:期望的时间,这不是理想的。

相关内容

  • 没有找到相关文章

最新更新