Автор неизвестен - Bash-скрипты, руководство в 11 частях
Название: | Bash-скрипты, руководство в 11 частях | |
Автор: | Автор неизвестен | |
Жанр: | Другие языки и системы программирования, Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Linux | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | - | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Bash-скрипты, руководство в 11 частях"
Аннотация к этой книге отсутствует.
Читаем онлайн "Bash-скрипты, руководство в 11 частях". [Страница - 47]
Как видите, autoexpect — это весьма полезный инструмент, но и он не лишён недостатков, исправить которые можно только вручную. Поэтому продолжим осваивать язык expect-скриптов.
Работа с переменными и параметрами командной строки
Для объявления переменных в expect-скриптах используется команда set. Например, для того, чтобы присвоить значение 5 переменной VAR1, используется следующая конструкция:
set VAR1 5
Для доступа к значению переменной перед её именем надо добавить знак доллара — $. В нашем случае это будет выглядеть как $VAR1.
Для того, чтобы получить доступ к аргументам командной строки, с которыми вызван expect-скрипт, можно поступить так:
set VAR [lindex $argv 0]
Тут мы объявляем переменную VAR и записываем в неё указатель на первый аргумент командной строки, $argv 0.
Для целей обновлённого expect-скрипта мы собираемся записать значение первого аргумента, представляющее собой имя пользователя, которое будет использовано в программе, в переменную my_name. Второй аргумент, символизирующий то, что пользователю нравится, попадёт в переменную my_favorite. В результате объявление переменных будет выглядеть так:
set my_name [lindex $argv 0]
set my_favorite [lindex $argv 1]
Отредактируем скрипт answerbot, приведя его к такому виду:
#!/usr/bin/expect -f
set my_name [lindex $argv 0]
set my_favorite [lindex $argv 1]
set timeout -1
spawn ./questions
expect "Hello, who are you?\r"
send -- "Im $my_name\r"
expect "Can I ask you some questions?\r"
send -- "Sure\r"
expect "What is your favorite topic?\r"
send -- "$my_favorite\r"
expect eof
Запустим его, передав в качестве первого параметра SomeName, в качестве второго — Programming:
$ ./answerbot SomeName Programming
Expect-скрипт, использующий переменные и параметры командной строки
Как видите, всё работает так, как ожидалось. Теперь expect-скрипт отвечает на вопросы bash-скрипта, пользуясь переданными ему параметрами командной строки.
Ответы на разные вопросы, которые могут появиться в одном и том же месте
Если автоматизируемая программа может, в одной ситуации, выдать одну строку, а в другой, в том же самом месте — другую, в expect можно использовать блоки, заключённые в фигурные скобки и содержащие варианты реакции скрипта на разные данные, полученные от программы. Выглядит это так:
expect {
"something" { send -- "send this\r" }
"*another" { send -- "send another\r" }
}
Здесь, если expect-скрипт увидит строку «something», он отправит ответ «send this». Если же это будет некая строка, оканчивающаяся на «another», он отправит ответ «send another».
Напишем новый скрипт, записав его в файл questions, случайным образом задающий в одном и том же месте разные вопросы:
#!/bin/bash
let number=$RANDOM
if [ $number -gt 25000 ]
then
echo "What is your favorite topic?"
else
echo "What is your favorite movie?"
fi
read $REPLY
Тут мы генерируем случайное число при каждом запуске скрипта, и, проанализировав его, выводим один из двух вопросов.
Для автоматизации такого скрипта нам и пригодится вышеописанная конструкция:
#!/usr/bin/expect -f
set timeout -1
spawn ./questions
expect {
"*topic?" { send -- "Programming\r" }
"*movie?" { send -- "Star wars\r" }
}
Ответы на разные вопросы, появляющиеся в одном и том же месте
Как видно, когда автоматизированный скрипт выводит строку, оканчивающуюся на «topic?», expect-скрипт передаёт ему строку «Programming». Получив в том же месте, при другом запуске программы, вопрос, оканчивающийся на «movie?», expect-скрипт отвечает: «Star wars». Это очень полезная техника.
Условный оператор
Expect поддерживает условный оператор if-else и другие управляющие конструкции. Вот пример использования условного оператора:
#!/usr/bin/expect -f
set TOTAL 1
if { $TOTAL < 5 } {
puts "\nTOTAL is less than 5\n"
} elseif { $TOTAL > 5 } {
puts "\nTOTAL greater than 5\n"
} else {
puts "\nTOTAL is equal to 5\n"
}
expect eof
Условный оператор в expect
Тут мы присваиваем переменной TOTAL некое число, после --">Книги схожие с «Bash-скрипты, руководство в 11 частях» по жанру, серии, автору или названию:
Другие книги автора « »:
Автор неизвестен - Комментарий Адвентистов Седьмого Дня на Послания апостола Павла к Римлянам Жанр: Религия |
Автор неизвестен - Сироты, престарелые и нетрудоспособные в Московской губернии Жанр: Документальная литература Год издания: 1915 |
Автор неизвестен - Истории Черной Земли. Сказки и легенды Анголы Жанр: Мифы. Легенды. Эпос Год издания: 1975 |