Все понял!
СПАСИБО БОЛЬШОЕ!!!!!
EXPECT передача переменной скрипту
Просто написал
nano /home/local SWITCH_IP В программе. И все заработало! Значение передалось!))
Большое спасибо за помощь!!!
А можно еще вопрос:
Как сделать так, чтобы expect понимал "*". Т.е. мне нужно:
switch10027(config)#"
send -- "ip acce "
expect -exact "\r
switch10027(config)#ip access-list "
send -- "e А вот так:
*(config)#"
send -- "ip acce "
expect -exact "\r
*(config)#ip access-list "
send -- "e Для того чтобы сделать скрипт универсальным.
Как сделать так, чтобы expect понимал "*". Т.е. мне нужно:
вы знает,.. Не помню. Как-то можно, но не нужно. expect я только в крайнем случае юзаю - если надо что-то передать интерактивной программе. В самом крайнем случае, я меняю сам скрипт. Например, как я понимаю, вам нужно сменить switch10027 скажем на switch10028?
ок, пишем
sed -i "s/switch10027/switch10028/g" script.expectа ещё лучше будет сделать так:
[console]sed "s/#SWITCH#/$SWITCH/g" script.tpl >script.expect[/console]
тут $SWITCH это переменная шелла, с нужным параметром, а script.tpl это шаблон, в котором вместо параметра написано #SWITCH#
т.е. по шаблону мы генерируем нужные скрипты на данный случай. ибо в самом экспекте программировать невозможно - кажется, что его специально запутывали. :(
Сделал подругому. Правда геморно, но зато все видно и на лицо)))
set sw [lindex $argv 0]
set witch10027 192,168,0,2
set witch10026 192,168,0,5
if {$sw==$witch10027} {set nom switch10027}
$nom#"
send -- "conf t\r"
expect -exact "conf t\r
Enter configuration commands, one per line. End with CNTL/Z.\r
$nom(config)#"
Единственная проблема:
$nom(config)#"
понимает как массив. Как можно переменную вставить в середину слова???
Столкнулся со схожей проблемой, пока не могу найти решение
http://www.opennet.ru/openforum/vsluhforumID9/9447.html#3
суть такова, в теле expect скрипта вызываю любую команду shell, результат который возвращает команда shell нужно присвоить переменной в скрипте expect.
Здравствуйте, коллеги!
А expect умеет "выдергивать" из переменной символы?
Допустим есть скрипт, которому передаю значение переменной
# /home/local 192.168.0.1#!/usr/bin/expect -f
set timeout -1
spawn telnet $SWITCH_IP
match_max 100000
expect -exact "Trying $SWITCH_IP...\r\r
Connected to $SWITCH_IP ($SWITCH_IP).\r\r
Escape character is '^\]'.\r\r
\r
\r
User Access Verification\r
\r
Username: "
send -- "логин\r"
expect -exact "логин\r
Password: "
send -- "пароль\r"
expect -exact "\r
\r
switch10027#"
send -- "conf t\r"
expect -exact "conf t\r
Enter configuration commands, one per line. End with CNTL/Z.\r
Можно ли сделать так, чтобы при "длинне" переменной выше 11 символов, скрипт "Обрезал" ее до 11.
Допустим мы передаем
# /home/local 192.168.0.19875Скрипт проверяет переменную и обрезфет ее до 192.168.0.1.
Спасибо.