For loop 预期循环/预期输出(缓冲区)问题
我是新来的。尝试为cisco router编写一个脚本,该脚本将接口列表作为输入,迭代每个接口,运行命令,保存输出,计算输出中的行数,并根据计数执行if/else语句 我在论坛上搜索过,并根据其他用户的建议拼凑了以下脚本: 现在只需在此处粘贴循环代码:For loop 预期循环/预期输出(缓冲区)问题,for-loop,expect,For Loop,Expect,我是新来的。尝试为cisco router编写一个脚本,该脚本将接口列表作为输入,迭代每个接口,运行命令,保存输出,计算输出中的行数,并根据计数执行if/else语句 我在论坛上搜索过,并根据其他用户的建议拼凑了以下脚本: 现在只需在此处粘贴循环代码: foreach int $interfaces { match_max 20000 send_user "\n" send_user "====== Checking $int ======\n" send_us
foreach int $interfaces {
match_max 20000
send_user "\n"
send_user "====== Checking $int ======\n"
send_user "\n"
set capture [open output2 w]
expect "#"
send "show policy-map $int out\n"
sleep 1
expect "#"
set output $expect_out(buffer)
puts $capture $output
close $capture
set capture 0
send_user "\n\n---------- $expect_out(buffer) ------------\n\n"
set count 0
set count [exec cat output2 | wc -l]
send_user "\n=========== $int $count ===========\n"
if {$count<3} {
puts "Service policy on ! $ip ! $int ! is not working"
} else {
puts "Service policy on ! $ip ! $int is working"
}
exec echo > output2
foreach int$接口{
匹配的最大值为20000
发送\u用户“\n”
发送用户“==========检查$int================\n”
发送\u用户“\n”
设置捕获[打开输出2 w]
期望“#”
发送“显示策略映射$int out\n”
睡眠1
期望“#”
设置输出$expect\u out(缓冲区)
放入$capture$输出
关闭$capture
将捕获设置为0
发送\u用户“\n\n-----------$expect\u out(缓冲区)-------------\n\n”
设置计数0
设置计数[exec cat output2 | wc-l]
发送\u用户“\n======================$int$count======================\n”
如果{$count output2
}
但是,当我运行脚本时,文件output2和expect_out(缓冲区)总是只有一个字符“#”。因此,我没有得到所需的结果。出于某种原因,expect_out(缓冲区)没有捕获命令“show policy map$int out”的输出并将其写入文件。我猜在循环结构方面存在一个基本的编码错误
非常感谢您的帮助
非常感谢。首先,请阅读本书,以获得预期的学习: 从上面的书: 所有匹配的字符加上较早出现的字符 但不匹配的数据存储在名为expect_out(buffer)的变量中 在本例中,您期望的只是您的模式,它是
。因此,您认为它是正确的
现在,对于您的要求,请参考。此链接为您提供了必要的解释。再次感谢您的支持。我发现了问题。在我感兴趣的问题之前有一个“#”。更改了模式匹配,现在它可以工作。感谢您的回复。您是对的,我正在匹配“#”,但我也期待看到结果“#”之前的命令的一部分将在expect_out(buffer)中。但它仅显示匹配的模式。再次感谢您的支持。我发现了问题。在我感兴趣的之前有一个“#”。更改了模式匹配,现在它可以工作了。