TCL脚本语言如何获取snmp索引输出的值

How to get value of snmp index outputs in TCL scripting language

我需要一个脚本来找到所有禁用的端口 (ifAdminStatus=1) 并取消关闭它们(或任何其他操作) 问题是我无法通过 if 命令获取值。好像我错过了什么。

如您所见,索引为 20 的接口的 ifAdminStatus 值为 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。然后我应该将它扩展到所有端口并制作接口数组,制作动作等

如有任何帮助,我们将不胜感激。

鉴于此

snmp_getone Public ifAdminStatus.20

returns这个

{<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} {...