Уважаемые форумчане, прошу вас не бить меня тапком и не ссылаться, что есть куча решений-гугл в помощь, ветка форума изучена, особенно тема про 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
............
аналогично как и для предыдущего адреса.А программная реализация для меня непосильна.
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
EOFfor 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
> ............
> аналогично как и для предыдущего адреса.
> А программная реализация для меня непосильна.
Ну и 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
>> ............
>> аналогично как и для предыдущего адреса.
>> А программная реализация для меня непосильна.
Благодаря терпению отличного человека 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Самое хорошее, внутри цикла можно модифицировать исполняемые команды, расширять, заливать- на что хватит желания и потребностей. Спасибо.