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

Наиболее очевидным усовершенствованием могло бы стать выполнение каких-то действий в ответ на ошибки вместо вывода невнятной последовательности Page not found — City-Data.com. Еще более интересный вариант — добавить флаг −a, который сообщал бы сценарию о необходимости вывода дополнительной информации о регионе, тем более что http://city-data.com/ предлагает довольно много информации, помимо названий городов, включая площадь, сведения о населении и цены на недвижимость.

<p>№ 57. Поиск по телефонному коду города</p>

Сценарий поиска по телефонному коду города является разновидностью предыдущего. Как оказывается, реализовать такой сценарий действительно очень просто, благодаря существованию простых для анализа веб-страниц с кодами городов. Например, страница по адресу http://www.bennetyee.org/ucsd-pages/area.html легко поддается анализу, не только потому, что она хранит информацию в табличной форме, но и потому, что автор использовал атрибуты HTML для идентификации элементов. Например, строка с информацией о коде 207 выглядит так:

207ME

align=center>-5 Maine

Мы использовали этот сайт в сценарии (листинг 7.10) поиска по телефонному коду города.

<p>Код</p>

Листинг 7.10. Сценарий areacode

#!/bin/bash

# areacode — получая трехзначный телефонный код, действующий в США,

#·· определяет город и штат по данным в простой табличной форме, на

#·· веб-сайте Беннета Йи (Bennet Yee).

source="http://www.bennetyee.org/ucsd-pages/area.html"

if [-z "$1"]; then

··echo "usage: areacode "

··exit 1

fi

# wc −c вернет количество символов + символ перевода строки,

#·· то есть для 3 цифр = 4 символа

if ["$(echo $1 | wc −c)" −ne 4]; then

··echo "areacode: wrong length: only works with three-digit US area codes"

··exit 1

fi

# Все символы — цифры?

if [! -z "$(echo $1 | sed 's/[[: digit: ]]//g')"]; then

··echo "areacode: not-digits: area codes can only be made up of digits"

··exit 1

fi

# Теперь можно выполнить поиск по телефонному коду…

result="$(curl −s — dump $source | grep "name=\"$1" | \

··sed 's/<[^>]*>//g;s/^ //g' | \

··cut −f2- d\ | cut −f1 −d\()"

echo "Area code $1 =$result"

exit 0

<p>Как это работает</p>

Основная часть этого сценария выполняет проверку ввода, чтобы убедиться, что телефонный код, указанный пользователем, действителен. Наиболее важна тут команда curl — она извлекает данные из сети и передает их по конвейеру команде sed для анализа и команде cut для выделения информации, которую требуется вывести.

<p>Запуск сценария</p>

Этот сценарий принимает единственный аргумент — телефонный код города для поиска. Примеры использования сценария демонстрируются листинге 7.11.

<p>Результаты</p>

Листинг 7.11. Тестирование сценария areacode

$ areacode 817

Area code 817 = N Cent. Texas: Fort Worth area

$ areacode 512

Area code 512 = S Texas: Austin

$ areacode 903

Area code 903 = NE Texas: Tyler

<p>Усовершенствование сценария</p>

Самое простое усовершенствование, которое можно предложить, — реализовать обратный поиск, когда по названию города и штата сценарий находит и выводит все телефонные коды, соответствующие заданному городу.

<p>№ 58. Слежение за погодой</p>

Если вы проводите весь день в кабинете или в серверном зале, уткнувшись носом в терминал, вам наверняка иногда очень хочется выйти на улицу, прогуляться, особенно в хорошую погоду. Weather Underground (http://www.wunderground.com/) — отличный веб-сайт, который предлагает прикладной интерфейс (API) с бесплатным доступом для разработчиков. Вам нужно только зарегистрировать API-ключ. Имея API-ключ, можно написать короткий сценарий командной оболочки (показан в листинге 7.12), сообщающий, насколько хороша (или плоха) погода. Знание погоды поможет нам решить, стоит ли выходить на короткую прогулку.

<p>Код</p>

Листинг 7.12. Сценарий weather

··#!/bin/bash

Перейти на страницу:

Все книги серии Для профессионалов

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

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

Брендон Перри , Дейв Тейлор

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных