Библиотека knigago >> Компьютеры: Операционные системы >> Linux >> Bash-скрипты, руководство в 11 частях

Автор неизвестен - Bash-скрипты, руководство в 11 частях

Bash-скрипты, руководство в 11 частях
Книга - Bash-скрипты, руководство в 11 частях.  Автор неизвестен  - прочитать полностью в библиотеке КнигаГо
Название:
Bash-скрипты, руководство в 11 частях
Автор неизвестен

Жанр:

Другие языки и системы программирования, Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Linux

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Bash-скрипты, руководство в 11 частях"

Аннотация к этой книге отсутствует.

Читаем онлайн "Bash-скрипты, руководство в 11 частях". [Страница - 47]

сможет нормально работать. Справиться с этим можно, либо удалив из expect-скрипта данные, которые выглядят по-новому при каждом запуске программы, либо использовав шаблоны, пользуясь которыми, expect сможет правильно понять то, что хочет от него программа.


Как видите, 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

Книгаго: Bash-скрипты, руководство в 11 частях. Иллюстрация № 210

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" }

}

Книгаго: Bash-скрипты, руководство в 11 частях. Иллюстрация № 211

Ответы на разные вопросы, появляющиеся в одном и том же месте

Как видно, когда автоматизированный скрипт выводит строку, оканчивающуюся на «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

Книгаго: Bash-скрипты, руководство в 11 частях. Иллюстрация № 212

Условный оператор в expect

Тут мы присваиваем переменной TOTAL некое число, после --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.