Как получить значение вывода индекса snmp на языке сценариев TCL - PullRequest
0 голосов
/ 05 июля 2019

Мне нужен скрипт, чтобы найти все отключенные порты (ifAdminStatus = 1) и разблокировать их (или любое другое действие). Проблема в том, что я не могу получить значение командой if.Кажется, я что-то упустил.

Как видите, значение ifAdminStatus для интерфейса с индексом 20 равно 1

...

Router(tcl)#snmp_getone Public ifAdminStatus.20
{<obj oid='ifAdminStatus.20' val='1'/>}

...

Но я не могу получить это с помощью оператора If.Проверено следующие синтаксисы, но не удалось

...

Router(tcl)#
Router(tcl)#if {snmp_getone Public ifAdminStatus.20 ==1 } {puts "Value=1"}
syntax error in expression "snmp_getone Public ifAdminStatus.20 ==1 "
Router(tcl)#
Router(tcl)#if {'snmp_getone Public ifAdminStatus.20' ==1 } {puts "Value=1"}
syntax error in expression "'snmp_getone Public ifAdminStatus.20' ==1 "
Router(tcl)#if {[snmp_getone Public ifAdminStatus.20] ==1 } {puts "Value=1"}

...

Мне просто нравится возвращать 1, если значение равно 1. Тогда я долженрасширить его на все порты и создать массив интерфейсов, совершать действия и т. д.

Любая помощь будет принята.

1 Ответ

0 голосов
/ 06 июля 2019

Учитывая, что

snmp_getone Public ifAdminStatus.20

возвращает это

{<obj oid='ifAdminStatus.20' val='1'/>}

Когда вы пишете

if {[snmp_getone Public ifAdminStatus.20] == _something_} { ...

, тогда _something_ не будет "1".

Вам нужно будет проанализировать результат команды snmp_getone, чтобы извлечь значение атрибута val.Возможно, быстро и грязно:

set status [snmp_getone Public ifAdminStatus.20]
regexp {val='(.+?)'} $status -> val
if {$val == 1} {...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...