LinuxForum.Fans
Тема

BASH простой вопрос

Автор: foger 8 сообщений 4454 просмотров
#267779

Здравствуйте! В bash только начинающий, жизнь заставила написать скрипт по работе. Скрипт заходит на оборудование по telnet и выполняет команды. Все работает. Теперь мне нужно зайдя скриптом на свитч, считать определенный текст. Т.е., скрипт заходит на свитч D-link, выполняет команду "show switch", которая выводит подробную информацию о девайсе. Вывод примерно такой:

text

Device Type        : DES-3200-26 Fast Ethernet Switch
MAC Address        : 14-D6-4D-**-**-**
IP Address         : ip (Manual)
VLAN Name          : default
Subnet Mask        : 255.255.248.0
Default Gateway    : gw
Boot PROM Version  : Build 1.00.B004
Firmware Version   : Build 1.80.B006
Hardware Version   : A1
Serial Number      : 
System Name        : 
System Location    : 
System Uptime      : 14 days, 6 hours, 1 minutes, 16 seconds
System Contact     : 
Spanning Tree      : Disabled
GVRP               : Disabled
IGMP Snooping      : Enabled
VLAN Trunk         : Disabled
802.1X             : Disabled
Telnet             : Enabled (TCP 23)
Web                : Enabled (TCP 80)
RMON               : Disabled
SSH                : Disabled                                                  
SSL                : Disabled
CLI Paging         : Enabled
Syslog Global State: Enabled
Dual Image         : Supported
Password Encryption Status : Enabled

Вот мне нужно считать первую строку "Device Type : DES-3200-26 Fast Ethernet Switch" и из нее выдрать "DES-3200-26" и поместить в переменную.


Пример скрипта (прошу строго не судить):

text

#!/bin/bash

cat ./names.txt | while read line do

( echo "admin" sleep 1 echo "password" sleep 1 echo "show switch" sleep 1 echo "logout" sleep 1 ) | telnet $line done echo

Предполагаю, что нужно пользоваться sed и awk, но как именно встроить это все в этот код - не очень понятно. Знающему человеку это будет раз плюнуть))) Прошу помощи)

#267782

А на этом свитче точно awk есть?

text

lupo@gentoo-laptop /tmp/test $ DEVICE_NAME=$(awk '/Device Type/ {print $4}' test.txt)
lupo@gentoo-laptop /tmp/test $ echo $DEVICE_NAME
DES-3200-26
#267783
"foger" написал:
(
echo "admin"
sleep 1
echo "password"
sleep 1
echo "show switch"
sleep 1
echo "logout"
sleep 1
) | telnet $line

вместо этого порева лучше использовать expect...
ну это так.... на будущее... я так тоже когда-то с телефоном h.323-м разговаривал...

"foger" написал:
Предполагаю, что нужно пользоваться sed и awk, но как именно встроить это все в этот код - не очень понятно. Знающему человеку это будет раз плюнуть))) Прошу помощи)

то что на выходе из telnet'а загоняешь в трубу и из неё в sed -rn 's/^Device Type *: (\S).*$/\1/p'
ну и потом в read DEV_NAME

#267784

...да, и почему telnet?

#267785
"Lupo Alberto" написал:
...да, и почему telnet?

там не свитч там роутер... очевидно же...
[added]
хотя нет... не очевидно =))

#267786
"Fat-Zer" написал:
там не свитч там роутер... очевидно же...

Просто вижу, что в выводе SSHD есть, поэтому и вопрос.

#267787
Lupo Alberto написал:
А на этом свитче точно awk есть?

Нет конечно))) В том то и дело, что нужно считать вывод из telnet. А telnet используется потому что ssh запрещен по некоторым причинам (вроде были глюки)

"Fat-Zer" написал:
вместо этого порева лучше использовать expect...

До этого использовал скрипт на Expect - принципиальных различий не увидел, почти тоже самое, ИМХО.

Fat-Zer написал:
[quote="Lupo Alberto"]...да, и почему telnet?

там не свитч там роутер... очевидно же...
[added]
хотя нет... не очевидно =))[/quote]

Не, это обычный L2 коммутатор


Советы щас попробую, если что отпишусь. Заранее спасибо!

#267788
"Lupo Alberto" написал:
Просто вижу, что в выводе SSHD есть, поэтому и вопрос.

я уже понял, что глупость сморозил... много я ещё не знаю о сетях... свитчи видел тольку тупые как пробки...

"foger" написал:
До этого использовал скрипт на Expect - принципиальных различий не увидел, почти тоже самое, ИМХО.

принципиальная разница и преимущества в том, что это позволяет скрипту работать на максимальной скорости, которую позволяет удалённая точка и в том, что если роутер не представился или не запросил пароль, то можно сразу поднять панику, что «ах и ой что-то не в порядке»... ну и просто каждой мыше свой кактус...

Войдите или зарегистрируйтесь, чтобы ответить.