LINUX.ORG.RU

[bash] быстрая обработка вывода snmpget


0

1

Есть скрипт, опрашивающий железку по snmpget, и, в зависимости от ответа, переводящий её в другое состояние по snmpset.
Есть смысл его оптимизировать (переписывать на Си не предлагать, тут без вариантов)
Идёт последовательный опрос нужных OID'ов, с последующим грепом, что не очень быстро (даже полсекунды общего выигрыша уже будет хорошо).
Я пришёл к очевидному сворачиванию последовательных вызовов snmpget в один вызов, но в идеале хотелось бы избавиться и от внешних вызовов grep.
Вопрос собственно такой: как набор строк вида
OID1 = Online(n)
OID2 = Offline(n)
OID3 = Offline(n)
OID4 = Offline(n)
OID5 = Online(n)
OID6 = Offline(n)
...
можно преобразовать чисто средствами bash (у меня есть вера, что builtin функции работают быстрее) в...ну, по сути, в битовый массив наверно.
Конечно, ассоциативный массив, вида sensor[OID]=1|0, было бы совсем удобно и красиво, но тут на первом месте стоит быстродействие, так что к чёрту красоту

Последующая логика, грубо говоря, выглядит так:
if sensor[OID1]==Online then snmpset(OID2) = Offline

PS
Да, я понимаю, что основное время съест ввод/вывод snmp запросов и я пытаюсь экономить на спичках

★★★★★

[bash] быстрая обработка

у меня есть вера, что builtin функции работают быстрее

Это не правда. Это вообще, самое медленное, что только можно придумать. Но всё возможно.

doc@dt:~/tests$ X="OID1 = Online(n)"
doc@dt:~/tests$ echo $X
OID1 = Online(n)
doc@dt:~/tests$ echo ${X%% *}
OID1
# мы получили индекс к массиву
doc@dt:~/tests$ echo ${X##* }
Online(n)
doc@dt:~/tests$ Y=${X##* }
doc@dt:~/tests$ echo ${Y%(*}
Online
# мы получили value

ЗЫЖ это будет работать дольше _любого_ сканирования.

drBatty ★★ ()

>Последующая логика, грубо говоря, выглядит так: if sensor[OID1]==Online then snmpset(OID2) = Offline

дык засуньте в тексты, и прогоните сквозь sed.

drBatty ★★ ()
Ответ на: комментарий от zolden

zolden> хотелось знаете ли идеального идеала...

perl + Net::SNMP module

sdio ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.