Наиболее очевидным усовершенствованием могло бы стать выполнение каких-то действий в ответ на ошибки вместо вывода невнятной последовательности
№ 57. Поиск по телефонному коду города
Сценарий поиска по телефонному коду города является разновидностью предыдущего. Как оказывается, реализовать такой сценарий действительно очень просто, благодаря существованию простых для анализа веб-страниц с кодами городов. Например, страница по адресу http://www.bennetyee.org/ucsd-pages/area.html легко поддается анализу, не только потому, что она хранит информацию в табличной форме, но и потому, что автор использовал атрибуты HTML для идентификации элементов. Например, строка с информацией о коде 207 выглядит так:
207 ME
align=center>-5
Maine
Мы использовали этот сайт в сценарии (листинг 7.10) поиска по телефонному коду города.
Код
Листинг 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="$(
··sed 's/<[^>]*>//g;s/^ //g' | \
··cut −f2- d\ | cut −f1 −d\()"
echo "Area code $1 =$result"
exit 0
Как это работает
Основная часть этого сценария выполняет проверку ввода, чтобы убедиться, что телефонный код, указанный пользователем, действителен. Наиболее важна тут команда curl
Запуск сценария
Этот сценарий принимает единственный аргумент — телефонный код города для поиска. Примеры использования сценария демонстрируются листинге 7.11.
Результаты
Листинг 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
Усовершенствование сценария
Самое простое усовершенствование, которое можно предложить, — реализовать обратный поиск, когда по названию города и штата сценарий находит и выводит все телефонные коды, соответствующие заданному городу.
№ 58. Слежение за погодой
Если вы проводите весь день в кабинете или в серверном зале, уткнувшись носом в терминал, вам наверняка иногда очень хочется выйти на улицу, прогуляться, особенно в хорошую погоду. Weather Underground (http://www.wunderground.com/) — отличный веб-сайт, который предлагает прикладной интерфейс (API) с бесплатным доступом для разработчиков. Вам нужно только зарегистрировать API-ключ. Имея API-ключ, можно написать короткий сценарий командной оболочки (показан в листинге 7.12), сообщающий, насколько хороша (или плоха) погода. Знание погоды поможет нам решить, стоит ли выходить на короткую прогулку.
Код
Листинг 7.12. Сценарий weather
··#!/bin/bash