Tcl 预期脚本问题

Tcl 预期脚本问题,tcl,telnet,expect,cisco,Tcl,Telnet,Expect,Cisco,我是新来的,我使用一种逻辑来自动连接用户登录的telnet会话,并保持其他线路不变: for {set i 0} {$i ==4} {incr i} { send "clear line vty $i\r" "confirm]" {send "\r"} "% Not allowed" {send "quit\r"; exit} } 它断开了所有的线路 现在我使用“show user”命令,但是我很难编写一个脚本,输出对我来说不够友好。所以我在这个for循环中编写了IF语句,但它

我是新来的,我使用一种逻辑来自动连接用户登录的telnet会话,并保持其他线路不变:

for {set i 0} {$i ==4} {incr i} {  
send "clear line vty $i\r"  
"confirm]" {send "\r"}  
"% Not allowed" {send "quit\r"; exit}  
}
它断开了所有的线路


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

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

对于{set i 0}{$i==4}{incr i}{
发送“清除行vty$i\r”
“确认”{发送”\r}
“%Not allowed”{send“quit\r;exit}
}
如果您看到
%notallowed
,只需绕过这一行并移动到下一行,而不是退出脚本

对于{set i 0}{$i<4}{incr i}{
发送“清除行vty$i\r”
期待{
“确认”{发送“\r”;预期“*#”}
%不允许“{send”!拒绝清除vty$i\r“expect”*#“}
}
}
Cisco IOS将以
开头的行视为注释


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

#!/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
#/usr/bin/expect-f
spawn telnet 172.16.1.5
设置用户[lindex$argv 0]
设置通行证[lindex$argv 1]
应为“用户名:”
发送“$user\r”
预期“assword:”
发送“$pass\r”
期望“>”
发送“启用\r\n”
预期“assword:”
发送“$pass\r”
期望“*#”
对于{set i 0}{$i<5}{incr i}{
发送“清除行vty$i\r”
期待{
“确认”{发送“\r”;预期“*#”}
%不允许“{send”!拒绝清除vty$i\r“expect”*#“}
}
}
出口

我不明白期待{}做什么??它是否带来了大量的expect?这是一种告诉expect查找两个响应中的一个OK great和另一件事…我正在运行一个expect脚本来运行一个命令,以检查实验室启动10分钟后使用“sh line tty 1 sum”占用的tty行然后匹配字符串…是否可能,如果他们没有在线,我可以在我的php脚本中返回一个值,这样我就可以删除用户凭据???我希望你知道我在做什么:)这是一个免费的cisco+基于云的网络监控工具,在实验室:)我会告诉你,一旦它建成。你是个真正的帮手,不客气。如果这解决了你的问题,请不要忘记接受答案。