Expect - очень удобное средство для автоматизации управления, в моем случае маршрутизаторами по telnet.
Запускаем под Windows
- Загружаем Active Tcl с http://www.activestate.com/activetcl/downloads/
- Устанавливаем (Обычно c:/Tcl/ directory)
- Переходим в папку Bin в командной строке (Start > Run > commad > cd c:\Tcl\bin)
- При работе через прокси нужна будет команда teacup proxy
(например teacup proxy myproxy.com 8080). Если не работает можно установить переменные среды:
set http_proxy=http://proxyhost:80/
set http_proxy_user=NTDOMAIN\username
set http_proxy_pass=yourpassword - Вводим команду для установки Expect: teacup install Expect (если не удается установить может помочь команда teacup update)
Для того чтобы файлы Expect запускались под Windows в файл следует добавить следующий заголовок:
#!/bin/sh
# \
exec tclsh "$0" ${1+"$@"}
package require Expect
# \
exec tclsh "$0" ${1+"$@"}
package require Expect
Для того чтобы запустить скрипт вводим следующую команду:
c:\tcl\bin\> tclsh85 myscirpt.tcl
Можно запускать внешние команды, используя команду spawn:
spawn ssh myserver.com
c:\tcl\bin\> tclsh85 myscirpt.tcl
Можно запускать внешние команды, используя команду spawn:
spawn ssh myserver.com
send -- "someting\r" - Отправить команду и нажать "Enter"
expect -- ">" - Ждать появления символа ">"
expect -- ">" - Ждать появления символа ">"
Еще примеры можно найти на http://en.wikipedia.org/wiki/Expect
Примеры:
Telnet
login:
#!/bin/sh
# \
exec tclsh "$0" ${1+"$@"}
package require Expect
spawn telnet 172.20.0.125
expect "Password: "
send
"cisco\r"
expect ">"
send "en\r"
expect "Password: "
send
"cisco\r"
expect "#"
send "show clock\r"
expect "#"
send "exit\r"
expect eof #всегда добавляем в конце скрипта
Цикл (телнет на маршрутизаторы по
списку:
#!/bin/sh
# \
exec tclsh "$0" ${1+"$@"}
package require Expect
foreach address {
172.19.0.31
172.19.0.32
} {
Sleep 5 #ждем 5 секунд. Без этой команды может не подцепиться к следующему устройству
send "telnet $address /source-interface
l0\r"
expect "Password: "
send
"cisco\r"
expect ">"
send "exit\r"
}
expect eof
Массив:
set password(0) "sample"
set password(1) "test"
set password(2) "pswd"
set password(3) "getsome"
set password(4) "yeah"
set num_passwd
[array size password] #объявляем переменную со
#значением, равным числу
#элементов массива
....
set count 0
....
while
{$count<$num_passwd} {
expect "*assword:"
{
send $password($count)\r}
incr count
}
....
}
Donn Libes "Exploring Expect" (O'Reilly, 1994)
Комментариев нет:
Отправить комментарий