Как я могу искать через переменную Expect

Я работаю над ожидаемым сценарием, который подключается к коммутатору, а затем показывает конфигурацию для интерфейса. Затем я анализирую этот вывод, чтобы проверить определенные вещи. Я хотел бы сохранить выходные данные одной из проверяемых вещей, которую я пытаюсь выполнить, просматривая $ allow_out(buffer), хотя мне трудно найти способ сделать это.

Как мне это сделать?

Сценарий выглядит следующим образом (вырезать ненужные вещи):

send "show running-config interface $intf\r"
log_user 0
expect "#"
if {[string match "*service-policy input Access-Port*" $expect_out(buffer)]} {
    set servicepolicy "yes"
} else {
    set servicepolicy "no"
}
if {[string match "*mls qos trust dscp*" $expect_out(buffer)]} {
    set mlsqos "yes"
} else {
    set mlsqos "no"
}
if {[string matc "*Description*" $expect_out(buffer)]} {
    EXTRACT DESCRIPTION STRING FROM $expect_out(buffer)
}

Вот как обычно будет выглядеть вывод $pect_out(buffer):

Current configuration : 559 bytes
!
interface GigabitEthernet1/0/17
 description blablabla
 switchport mode access
 switchport voice vlan xxxxx
 no logging event link-status
 authentication event fail retry 0 action authorize vlan xxxxx
 authentication event no-response action authorize vlan xxxxx
 authentication host-mode multi-domain
 authentication port-control auto
 authentication violation restrict
 mab
 no snmp trap link-status
 dot1x pae authenticator
 dot1x timeout tx-period 5
 dot1x timeout supp-timeout 10
 no mdix auto
 spanning-tree portfast
 service-policy input Access-Port
end

Строка "EXTRACT DESCRIPTION STRING FROM $ hope_out(buffer)" - это часть, которую я пытаюсь выяснить. Я знаю, как разбить строку, чтобы получить только описание, но я просто не знаю, как извлечь саму строку из переменной буфера.

1 ответ

Решение

Использовать regexp команда с -line опция:

% regexp -line {^\s*description (.*)$} $expect(buffer) -> desc
1
% puts $desc
blablabla

Я предполагаю, что описание не многострочное.

Кроме того, если вам просто нужно логическое значение,

set servicepolicy [string match "*service-policy input Access-Port*" $expect_out(buffer)]

или сделай это

set servicepolicy [expr {[string match "*service-policy input Access-Port*" $expect_out(buffer)] ? "yes" : "no"}]
Другие вопросы по тегам