URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9233
[ Назад ]

Исходное сообщение
"Скрипт с массивом и считыванием в переменную части строки"

Отправлено polka , 02-Сен-11 19:19 
Уважаемые форумчане, прошу вас не бить меня тапком и не ссылаться, что есть куча решений-гугл в помощь, ветка форума изучена, особенно тема про expect, но не хватает опыта, поделиться которым прошу вас.

Задача следующая. написать скрипт выполнения однотипных операций для подсети маски 27.

Проблема в том, что:

1. не могу найти пример реализации автоматического входа на оборудование в массиве, то есть
192.168.1.2 - залогинился, выполнил команды, пошел на 192.168.1.3, опять выполнил команды,  ----и так далее---как цикл правильно оформлять?
2. при вводе логина-пароля появляется hostname, который необходимо внести в один из пунктов этой же железки в теле самого цикла- нужно записать строку в переменную.

Если вручную, то так, алгоритм прост:

telnet 192.168.1.2
username:admin
password:*****
Router2>en
Router2#  (запомнить строку до символа решетки в строковую переменную Tab)
Router2#conf t
Router2#bridgeport circuit-id client Tab ( строковую переменную вставляем)
Router2#copy run start
Router2#exit
telnet 192.168.1.3
............
аналогично как и для предыдущего адреса.

А программная реализация для меня непосильна.


Содержание

Сообщения в этом обсуждении
"Скрипт с массивом и считыванием в переменную части строки"
Отправлено beebeeep , 02-Сен-11 22:27 
cat << EOF > ./config.expect
#!/usr/bin/expect -f
set host [lrange $argv 0 0]

spawn telnet $host

expect "username"
send "admin\r"

expect "password"
send "*****\r"

expect ">"
send "en\r"

expect -indices -re "(.*)#"
set hostname $expect_out(0,string)
send "conf t\r"

expect "#"
send "bridgeport circuit-id client Tab $hostname\r"

expect "#"
send "copy run start\r"

expect "#"
send "exit\r"
expect eof
EOF

for x in `seq 2 30`; do ./config.expect 192.168.1.$x; done

Как-то так, наверное. Не проверял.

>[оверквотинг удален]
> Router2>en
> Router2#  (запомнить строку до символа решетки в строковую переменную Tab)
> Router2#conf t
> Router2#bridgeport circuit-id client Tab ( строковую переменную вставляем)
> Router2#copy run start
> Router2#exit
> telnet 192.168.1.3
> ............
> аналогично как и для предыдущего адреса.
> А программная реализация для меня непосильна.


"Скрипт с массивом и считыванием в переменную части строки"
Отправлено beebeeep , 02-Сен-11 22:29 
Ну и chmod +x ./config.expect не забыть ага

>[оверквотинг удален]
>> Router2>en
>> Router2#  (запомнить строку до символа решетки в строковую переменную Tab)
>> Router2#conf t
>> Router2#bridgeport circuit-id client Tab ( строковую переменную вставляем)
>> Router2#copy run start
>> Router2#exit
>> telnet 192.168.1.3
>> ............
>> аналогично как и для предыдущего адреса.
>> А программная реализация для меня непосильна.


"Скрипт с массивом и считыванием в переменную части строки"
Отправлено polka , 05-Сен-11 12:30 
Благодаря терпению отличного человека  beebeeep на свет родился функционирующий скрипт, удовлетворяющий поставленной задаче темы, делюсь с другими:

#!/usr/bin/expect -f
set host [lrange $argv  0 0]
spawn telnet $host
expect "username"
send "admin\r"
expect "password"
send "admin\r"
expect -indices -re "\n(.*)#"
set Tab $expect_out(1,string)
send "conf t\r"
send "bridgeport circuit-id client $Tab \r"
expect "#"
send "copy run start\r"
expect "(y/n)?"
send "y\r"
expect "#"
send "quit\r"
expect eof

Самое хорошее, внутри цикла можно модифицировать исполняемые команды, расширять, заливать- на что хватит желания и потребностей. Спасибо.