有了Nagios,我想读取数百个Ubiquity设备的设备名称。 这个值在其中一些上有一个OID,另一个在另一个上。 到目前为止,最好的方法是使用这个脚本:
$1/check_snmp -H $2 -o .1.2.840.10036.3.1.2.1.3.5 > /tmp/$2.snmp.nagios.tmp status=$? if [ $status -ne 0 ]; then $1/check_snmp -H $2 -o .1.2.840.10036.3.1.2.1.3.9 > /tmp/$2.snmp.nagios.tmp status=$? fi cat /tmp/$2.snmp.nagios.tmp exit $status
我不喜欢这里是它使用文件系统,但我不知道如何读取命令输出到一个variables,并退出命令的代码到另一个variables。
有没有办法写这个,所以它只使用variables?
有没有更好的方法来实现主要目标?
您可以直接使用命令snmpget而不是check_snmp,因为check_snmp将使用snmpget(或netsnmp工具的其他工具)并对存储在variables中的结果进行处理。
我在这里粘贴我使用的脚本的骨架:
function control_error { echo "UNKNOWN : Error during operation" exit 3 } drive="$(snmpget -v1 -Ovq -c <community snmpv1> $IPadress .1.3.6.1.4.1.2.3.51.3.1.13.1.3.1.2.$i)" if [ $? != 0 ]; then control_error;fi drive="$(echo $drive | sed -e 's/"//g')" ...
该脚本读取一个OID并将结果存储在variables驱动器中。
它testingsnmpget的事件错误,并返回3(对于nagios未知),如果问题。
snmpget选项是:
你可以在你的variables上工作,例如在这个脚本中使用echo和sed
我通常这样做:
data=$(your command) result=$?
这样你可以在$data得到命令的输出,在$result得到返回码。 但也许有一个更好的方法。