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

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


expect

Различия

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

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

expect [2018/11/07 09:21]
expect [2020/06/13 13:45] (текущий)
Строка 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>