For loop 预期循环/预期输出(缓冲区)问题

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

我是新来的。尝试为cisco router编写一个脚本,该脚本将接口列表作为输入,迭代每个接口,运行命令,保存输出,计算输出中的行数,并根据计数执行if/else语句

我在论坛上搜索过,并根据其他用户的建议拼凑了以下脚本:

现在只需在此处粘贴循环代码:

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)中。但它仅显示匹配的模式。再次感谢您的支持。我发现了问题。在我感兴趣的之前有一个“#”。更改了模式匹配,现在它可以工作了。