Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание

Тут можно читать онлайн Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Питер, год 2017. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
  • Автор:
  • Жанр:
  • Издательство:
    Питер
  • Год:
    2017
  • Город:
    СПб.
  • ISBN:
    978-5-496-03029-8
  • Рейтинг:
    5/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - описание и краткое содержание, автор Дейв Тейлор, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Сценарии командной оболочки помогают системным администраторам и программистам автоматизировать рутинные задачи с тех самых пор, как появились первые компьютеры. С момента выхода первого издания этой книги в 2004 году многое изменилось, однако командная оболочка bash только упрочила свои лидирующие позиции. Поэтому умение использовать все ее возможности становится насущной необходимостью для системных администраторов, инженеров и энтузиастов. В этой книге описываются типичные проблемы, с которыми можно столкнуться, например, при сборке программного обеспечения или координации действий других программ. А решения даются так, что их легко можно взять за основу и экстраполировать на другие схожие задачи.
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать книгу онлайн бесплатно, автор Дейв Тейлор
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

с атрибутом class="findHeader" и текстом No results («Нет результатов»). Именно эту ситуацию проверяет команда в строке картинка 376. Далее следует простая проверка: если содержимое $fail имеет ненулевую длину, сценарий сообщает об отсутствии результатов.

Однако если $fail ничего не содержит, это означает, что поиск по заданному шаблону удался и в файле хранятся некоторые результаты. Далее в результатах выполняется поиск шаблона /title/tt, но здесь есть одна сложность: разобрать результаты, возвращаемые базой данных IMDb, очень непросто, потому что для каждой заданной ссылки в результатах имеется несколько совпадений. Остальная последовательность замысловатых команд sed|grep|sed пытается идентифицировать и удалить повторяющиеся совпадения и оставить только то, что имеет значение.

Кроме того, когда IMDb находит совпадение, такое как "Lawrence of Arabia (1962)", она возвращает название и год в двух разных элементах HTML, в двух разных строках. М-да. Однако год нам определенно необходим, чтобы различать фильмы с одинаковыми названиями. Этим занимается команда awk в строке картинка 377,используя весьма хитроумный способ.

Для тех, кто не знаком с awk, отметим, что в общем случае awk-сценарий имеет следующую организацию: (условие) { действие }. Эта строка сохраняет нечетные строки в $title, и затем, когда очередь доходит до четной строки (с годом и данными о соответствии), она выводит предыдущую и текущую строки в одну строку.

Запуск сценария

Хотя этот сценарий невелик, он обладает большой гибкостью в отношении формата входных данных, как видно из листинга 7.15. Вы можете указать название фильма в кавычках или как набор отдельных слов, а можете ввести восьмизначный числовой код IMDb, чтобы выбрать конкретный фильм.

Результаты

Листинг 7.15.Запуск сценария moviedata

$ moviedata lawrence of arabia

0056172: Lawrence of Arabia (1962)

0245226: Lawrence of Arabia (1935)

0390742: Mighty Moments from World History (1985) (TV Series)

1471868: Mystery Files (2010) (TV Series)

1471868: Mystery Files (2010) (TV Series)

1478071: Lawrence of Arabia (1985) (TV Episode)

1942509: Lawrence of Arabia (TV Episode)

1952822: Lawrence of Arabia (2011) (TV Episode)

$ moviedata 0056172

Lawrence of Arabia (1962)

····A flamboyant and controversial British military figure and his

····conflicted loyalties during his World War I service in the Middle East.

Усовершенствование сценария

Одним из очевидных усовершенствований этого сценария могло бы стать удаление числовых кодов IMDb из вывода. Не составит труда скрыть коды (потому что, как показывает практика, они трудно запоминаются и пользователи допускают в них опечатки) и реализовать в сценарии вывод простого меню с уникальными индексами, которые могут применяться для выбора конкретного фильма.

В ситуации, когда для шаблона, заданного пользователем, обнаруживается только одно совпадение (попробуйте выполнить команду moviedata monsoon wedding), сценарий мог бы распознавать это, извлекать из полученных данных числовой код фильма и повторно вызывать самого себя, чтобы получить более подробную информацию. Вот такой круговорот получается!

Основная проблема этого и большинства других сценариев, извлекающих информацию из сторонних веб-сайтов, в том, что, если IMDb изменит верстку своей страницы, сценарий станет неработоспособным и вам придется исправлять его. Это скрытая ошибка, ждущая своего часа, но с такими сайтами, как IMDb, которые не меняются годами, вероятно, не особенно опасная.

№ 60. Пересчет валют по курсу

В первом издании этой книги задача пересчета денежных сумм из одной валюты в другую оказалась довольно сложной, и для ее решения потребовалось написать два сценария: один извлекал сведения о курсах валют из финансового веб-сайта и сохранял их в особом формате, а другой использовал эти данные для фактического пересчета, например, из долларов США в евро. В минувшие годы, однако, Всемирная паутина продолжала развиваться, и сейчас мы не видим причин перелопачивать горы информации, когда имеются такие сайты, как Google, предлагающие простые и дружественные для использования из сценариев калькуляторы.

Представленный в листинге 7.16 сценарий пересчета валют по курсу просто использует валютный калькулятор, доступный по адресу: http://www.google.com/finance/converter.

Код

Листинг 7.16.Сценарий convertcurrency

#!/bin/bash

# convertcurrency — принимая сумму и базовую валюту, пересчитывает эту

#·· сумму в другой валюте. Для обозначения валют используются идентификаторы

#·· ISO. Для фактических вычислений использует валютный калькулятор Google:

#·· http://www.google.com/finance/converter

if [$# −eq 0]; then

··echo "Usage: $(basename $0) amount currency to currency"

··echo "Most common currencies are CAD, CNY, EUR, USD, INR, JPY, and MXN"

··echo "Use \"$(basename $0) list\" for a list of supported currencies."

fi

if [$(uname) = "Darwin"]; then

··LANG=C # Для решения проблемы в OS X с ошибочными последовательностями

········ #·· байтов и lynx

fi

url="https://www.google.com/finance/converter"

tempfile="/tmp/converter.$$"

lynx=$(which lynx)

# Так как эти данные используются многократно, извлечем их,

#·· а потом займемся всем остальным.

currencies=$($lynx −source "$url" | grep "option value=" | \

··cut −d\" −f2- | sed 's/">/ /' | cut −d\(-f1 | sort | uniq)

########### Выполнить все запросы, не связанные с пересчетом.

if [$# −ne 4]; then

··if ["$1" = "list"]; then

····# Вывести список всех символов валют, известных калькулятору.

····echo "List of supported currencies: "

····echo "$currencies"

··fi

··exit 0

fi

########### Теперь выполним пересчет.

if [$3!= "to"]; then

··echo "Usage: $(basename $0) value currency TO currency"

··echo "(use \"$(basename $0) list\" to get a list of all currency values)"

··exit 0

fi

amount=$1

basecurrency="$(echo $2 | tr '[: lower: ]' '[: upper: ]')"

targetcurrency="$(echo $4 | tr '[: lower: ]' '[: upper: ]')"

# Наконец, фактический вызов калькулятора!

$lynx −source "$url?a=$amount&from=$basecurrency&to=$targetcurrency" | \

··grep 'id=currency_converter_result' | sed 's/<[^>]*>//g'

exit 0

Как это работает

Валютный калькулятор Google принимает три параметра непосредственно в URL: сумму, исходную валюту и конечную валюту. Как выглядит такой URL, можно видеть в следующем примере, запрашивающем пересчет 100 долларов США в мексиканские песо:

https://www.google.com/finance/converter?a=100&from=USD&to=MXN

Сценарий ожидает, что пользователь определит все три поля в аргументах, и затем передает их сайту Google в URL.

Сценарий также выводит несколько сообщений с информацией о порядке использования, что намного упрощает работу с ним. Чтобы увидеть эти сообщения, перейдем к разделу с демонстрационными примерами.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Дейв Тейлор читать все книги автора по порядку

Дейв Тейлор - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание отзывы


Отзывы читателей о книге Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание, автор: Дейв Тейлор. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x