1

目前我有一个脚本,它从下面的菜单响应中提取行#号,其中包含我对“SalVhugoV3”感兴趣的 SNMP 用户。

这是蓝色的菜单响应

选择一个 SNMP 用户:1)cmssnmp 2)atlas 3)SalVhugoV3 输入选项(1-3):

脚本的这个工作部分查找包含“SalVhugoV3”的字符串并去掉选项#3,因为这是它正在寻找的用户的选项。然后发送“3”作为“输入选择”提示的 snmpuserChoice。

从列表/菜单中选择 V3 用户,grep $V3USER 并发送它的号码

    expect -re ".*\\(.*\\):" {
    append rawOut $expect_out(buffer)
    regexp { .*(([0-9])\) [puts $V3USER].*) } $expect_out(buffer) cmdOut snmpUser snmpUserChoice
    exp_send -- "$snmpUserChoice\r"
}

我正在尝试做同样的事情,但使用此扩展响应,因为您可以看到在这种情况下我正在寻找的用户的选项是选项“5”,因为它在字符串末尾包含“SalVhugoV3”。我相信这是需要改变“ regexp { . (([0-9])) [放置$V3USER]。) } “但我不知道如何修改它以获取选项“5”编号,以便可以通过“exp_send”发送。

选择要删除的 SNMP 连接: 1) 与 NMS 的连接:主机 135.9.60.143,端口 162,用户 cmssnmp 2) 与 SAL 的连接:主机 135.9.158.252,端口 162,用户 cmssnmp 3) 与 SAL 的连接:主机 135.9.158.236,端口 162,用户 cmssnmp 4)连接到 NMS:主机 135.105.6.67,端口 162,用户图集 5)连接到 SAL:主机 135.60.25.147,端口 162,用户 SalVhugoV3 输入选项(1-5):

从列表/菜单中选择 V3 用户,grep $V3USER 并发送它的号码

    expect -re ".*\\(.*\\):" {
    append rawOut $expect_out(buffer)
    regexp { .*(([0-9])\) [puts $V3USER].*) } $expect_out(buffer) cmdOut snmpUser snmpUserChoice
    exp_send -- "$snmpUserChoice\r"
}
4

1 回答 1

0
regexp "((\[0-9\])\\)\[^\\)\]*$V3USER)" $expect_out(buffer) cmdOut snmpUser snmpUserChoice

对于 V3USER=atlas,它将给出:

snmpUser='4) 连接 NMS:主机 135.105.6.67,端口 162,用户图集'

snmpUserChoice='4'

为了更好的可读性和避免转义:

set gen_expr {([0-9])\)[^\)]*}
set spec_expr "($choice_expr$V3USER)"
regexp $spec_expr $expect_out(buffer) cmdOut snmpUser snmpUserChoice

顺便说一句:术语{ ... [puts $V3USER] }让我感到困惑。大括号中没有转义,因此这只是被解释为正则表达式的一部分,因此需要字符'p'、'u'、't'、's'、''、$'等之一...

于 2013-02-20T11:57:16.567 回答