LINUX.ORG.RU

bash empty обработка полученой строки

 , , ,


0

3

Не уверен сюда или в админ нужно было это написать, но..
Есть небольшой скриптик, заходящий на D-Link, смотрящий соседа (по lldp), и подписывающий порт если рядом кто то есть.

В принципе работает, но если на порту нет соседа, либо порта нет вовсе - ждет секунду пока не отвалится по таймауту. Время зря теряет (если участь что коммутаторов будет больше 100 - это вечность). Нормальной документации на empty не нашел :(
Есть ли более изящный способ обработки вывода, чем парсить логи?
Можно ли поправить, так что бы ждал не один, а несколько вариантов? что то вроде:

empty -w -v -i $fifo_out -o $fifo_in -t 1 Entry;None;completions q
Сам скрипт:
telnet="telnet"				
target="10.0.0.1"			
login="admin" 				
password="password!"	
fifo_in="/tmp/empty.in"			
fifo_out="/tmp/empty.out"		
telnet_cmd="$telnet $target"		
tmp="/tmp/empty.tmp"			

killall empty
empty -f -i $fifo_in -o $fifo_out -L $tmp $telnet_cmd
if [ $? = 0 ]; then
	if [ -w $fifo_in -a -r $fifo_out ]; then

		empty -w -v -i $fifo_out -o $fifo_in -t 5 ame "$login\n" 
		empty -w -v -i $fifo_out -o $fifo_in -t 5 "qwerrtry" "qwqwqw" ord "$password\n"
                empty -w -v -i $fifo_out -o $fifo_in -t 1 "#"

  	   for N in {1..28}
	   do
                empty -s -o $fifo_in "sh lldp r $N\n"
                empty -w -v -i $fifo_out -o $fifo_in -t 1 Entry q
        	empty -s -o $fifo_in "\n"
                empty -w -v -i $fifo_out -o $fifo_in -t 1 "#"
                desc=`cat $tmp | grep "System Name" | awk '{print $5}'`
                if [ -n "$desc" ] 
                 then 
                  empty -s -o $fifo_in "conf ports $N desc LINK_TO_${desc}\n"
                fi
               echo > $tmp
          done
        	empty -s -o $fifo_in 'logout\n'
		rm -f $tmp
	else
		echo "Error: Can't find I/O fifos!"
		return 1
	fi
else
	echo "Error: Can't start empty in daemon mode"
	return 1
fi 
так выглядит ошибка, порта нет:
admin#sh lldp r 28
Command: show lldp remote_ports
Next possible completions: 
{}                  <portlist>          mode
А так отсутствие соседа:
admin#sh lldp r 20
Command: show lldp remote_ports 20

Port ID : 20 
-------------------------------------------------------------------------------
Remote Entities Count : 0 
    (None)



Последнее исправление: DeeZ (всего исправлений: 4)

Думаю, я могу помочь, но для этого мне нужно объяснить, что такое empty и что вы с ним хотите сделать :) Пока подозреваю, что параллельный запуск этих empty мог бы помочь.

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

Знаю. Точнее видел его когда пытался решить эту задачу. Но на empty нашел рыбу, которую переделал под себя. С Expect разобраться не успел.

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