1

我是新手,我正在使用一种逻辑来自动断开用户登录的 telnet 会话并保持其他行不变:

for {set i 0} {$i ==4} {incr i} {  
send "clear line vty $i\r"  
"confirm]" {send "\r"}  
"% Not allowed" {send "quit\r"; exit}  
}

它断开所有线路

现在我使用“显示用户”命令,但我很难围绕它编写脚本,输出对我来说不够友好。所以我在这个 for 循环中编写了 IF 语句,但它并不好,甚至不值得在这里包含. 请有人指导我如何匹配输出结果中的字符串,并根据字符串决定是否清除行

4

1 回答 1

2

这是算法的一个有趣的旋转......您目前在遍历所有行时遇到的问题是,如果您的脚本仅在其中一行上看到自己,那么您的脚本将退出......

for {set i 0} {$i == 4} {incr i} {
send "clear line vty $i\r"
"confirm]" {send "\r"}
"% Not allowed" {send "quit\r"; exit}
}

如果您看到% Not allowed,只需绕过此行并移至下一行,而不是退出脚本...

for {set i 0} {$i < 4} {incr i} {
    send "clear line vty $i\r"
    expect {
        "confirm]" { send "\r"; expect "*#" }
        "% Not allowed" { send "! refusing to clear line vty $i\r"; expect "*#" }
    }
}

如果一行以!


以下脚本登录并清除除脚本运行的行之外的所有行...这在我的实验室中运行良好。

#!/usr/bin/expect -f

spawn telnet 172.16.1.5
set user [lindex $argv 0]
set pass [lindex $argv 1]

expect "Username: "
send "$user\r"
expect "assword: "
send "$pass\r"
expect ">"
send "enable\r"
expect "assword: "
send "$pass\r"
expect "*#"
for {set i 0} {$i < 5} {incr i} {
    send "clear line vty $i\r"
    expect {
            "confirm]" { send "\r"; expect "*#" }
            "% Not allowed" { send "! refusing to clear line vty $i\r"; expect "*#" }
    }
}
exit
于 2012-05-09T21:47:06.280 回答