Инструменты пользователя

Инструменты сайта


expect

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

expect [2018/11/07 08:21] (текущий)
Строка 1: Строка 1:
 +====== Expect примеры Linux ======
 +{{htmlmetatags>​
 +metatag-description=(Expect - инструмент для автоматизации интерактивных приложений в Linux таких, как telnet, ftp, passwd, fsck, rlogin, tip, ssh.)
 +}}
  
 +**Expect** - инструмент для автоматизации интерактивных приложений таких, как telnet, ftp, passwd, [[fsck]], rlogin, tip, [[ssh]] и других. Expect поддерживает механизм регулярных выражений и основные возможности программирования,​ позволяющие простым скриптам эффективно управлять такими программами,​ не обладающими встроенным скрипт-языком,​ макросами,​ или другими механизмами программирования. Эффективен при работе с сетевым оборудованием - массовое обновление конфигураций управляемого (активного) сетевого оборудования с дифференцированным выполнением команд.
 +
 +Одним из главных применений Expect являются коммерческие приложения. Многие из этих приложений предоставляют интерфейс командной строки,​ но, как правило,​ его недостаточно для написания скриптов. Они созданы для обеспечения пользователя средствами администрирования,​ но производители зачастую не тратят денег на создание полноценного скриптового языка.
 +
 +Expect унаследовал синтаксис [[Tcl]], который не похож на другие скриптовые языки, такие как [[bash]], [[csh]], и [[Perl]].
 +
 +Expect портирован в языки [[Python]] и Perl в виде различных дополнительных модулей. Подмножество команд Expect-а портировано в [[Java]] и доступно в SwitchTermJ (java-based Terminal Emulator). Реализация процедур в этих модулях это в основном интерпретация оригинальной версии с эквивалентной функциональностью.
 +
 +  * Установка в Debian
 +<​file>​
 +aptitude install expect-dev expect
 +</​file>​
 +====== expect_autoexpect ======
 +Скрипт **expect_autoexpect** позволяет создать скрипт с командами из текущей сессии. Например,​ создадим скрипт,​ который применяет изменения настройки для [[Softswitch]] [[MVTS]] Pro.<​file>​
 +# expect_autoexpect
 +autoexpect started, file is script.exp
 +# telnet 127.0.0.1 7000
 +Trying 127.0.0.1...
 +Connected to 127.0.0.1.
 +Escape character is '​^]'​.
 +******************************************************************************
 +*                   ​Multiprotocol VoIP Transit Softswitch ​                   *
 +*                                                                            *
 +******************************************************************************
 +
 +mvts3g|> config /​etc/​mvts3g/​system-1.conf
 +Step 1: Parsing a configuration file...
 +Step 2: Configuring the system...
 +Step 3: Done.
 +mvts3g|> exit
 +Connection closed by foreign host.
 +</​file>​
 +Жмем Ctrl-D для завершения работы скрипта expect_autoexpect<​file>​
 +# exit
 +autoexpect done, file is script.exp
 +</​file>​Теперь у нас получился запускаемый скрипт script.exp, который позволяет вместо набора трех команд просто запустить его:<​file>​
 +# ./​script.exp
 +</​file>​
 +====== Пример ======
 +
 +====== ftp_expect.sh ======
 +<​file>​
 +#​!/​usr/​bin/​expect -f
 +   ######################################################################################​
 +   #​$remote_server - сервер,​ к которому осуществляется доступ ​                          #
 +   #​$my_user_id ​   - имя пользователя на сервере ​                                       #
 +   #​$my_password ​  - пароль пользователя на сервере ​                                    #
 +   #​$my_command ​   - команда,​ которая будет запущена на сервере ​       ​
 +   
 +   set remote_server xxx.xxx.xxx.225
 +   set my_user_id testuser
 +   set my_password testpass
 +   # Открыть ftp-сессию на удалённом сервере,​ и ждать запроса имени пользователя.
 +   spawn ftp $remote_server
 +   ​expect "​username:"​
 +   # Послать имя пользователя,​ и ждать приглашения ввода пароля.
 +   send "​$my_user_id\r"​
 +   ​expect "​password:"​
 +   # Послать пароль,​ и ждать приглашения ввода ftp.
 +   send "​$my_password\r"​
 +   ​expect "​ftp>"​
 +   # Переключиться в бинарный режим, и снова ждать приглашения ввода ftp.
 +   send "​bin\r"​
 +   ​expect "​ftp>"​
 +   # Выключить приглашение ввода.
 +   send "​prompt\r"​
 +   ​expect "​ftp>"​
 +   # Получить все файлы
 +   send "mget *\r"
 +   ​expect "​ftp>"​
 +   # Закончить ftp-сессию и ждать спецсимвол конца файла (eof).
 +   send "​bye\r"​
 +   ​expect eof
 +</​file>​
 +====== ssh_expect.sh ======
 +<​file>​
 +#​!/​usr/​bin/​expect -f
 +#set timeout 100
 +set PASS "​testpass"​
 +set USER "​testuser"​
 +spawn ssh -T $USER@[lrange $argv 0 0];
 +expect "​password:"​
 +send "​$PASS\r"​
 +expect "​$"​
 +send "​ls\r"​
 +expect "​$"​
 +send "​exit\r"​
 +expect eof
 +</​file>​
expect.txt · Последние изменения: 2018/11/07 08:21 (внешнее изменение)