Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Название:Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Автор:
- Жанр:
- Издательство:Питер
- Год:2017
- Город:СПб.
- ISBN:978-5-496-03029-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Самое примечательное, что этот трюк легко реализовать в виде сценария командной оболочки, содержащего awk-программу длиной всего в несколько строк, который вызывается из веб-страницы посредством SSI или из плавающего кадра (iframe, способ включения фрагмента страницы, имеющего свой URL, отличный от URL самой страницы). Такой сценарий представлен в листинге 8.9.
Код
Листинг 8.9.Сценарий randomquote
#!/bin/bash
# randomquote — получая файл с данными, в котором каждая запись находится
#·· в отдельной строке, случайно выбирает одну строку и выводит ее. Хорошо
#·· подходит для вызова из веб-страницы посредством SSI.
awkscript="/tmp/randomquote.awk.$$"
if [$# −ne 1]; then
··echo "Usage: randomquote datafilename" >&2
··exit 1
elif [! -r "$1"]; then
··echo "Error: quote file $1 is missing or not readable" >&2
··exit 1
fi
trap "$(which rm) −f $awkscript" 0
cat << "EOF" > $awkscript
BEGIN { srand() }
······{ s[NR] = $0 }
END·· { print s[randint(NR)] }
function randint(n) { return int (n * rand()) + 1 }
EOF
awk −f $awkscript < "$1"
exit 0
Как это работает
Получая имя файла с данными, сценарий сначала проверяет существование файла и его доступность для чтения. Затем он передает весь файл короткому awk-сценарию, который сохраняет строки из него в массиве, подсчитывает их количество и затем случайно выбирает одну и выводит ее на экран.
Запуск сценария
Этот сценарий можно внедрить в SSI-совместимую веб-страницу, как показано ниже:
Большинство серверов требуют, чтобы страницы с подобными вставками хранились в файлах с расширением .shtml , а не с более традиционными .html и .htm . Благодаря этому простому изменению вывод сценария randomquote будет внедряться в содержимое веб-страницы.
Результаты
Этот сценарий можно опробовать в командной строке, вызвав его, как показано в листинге 8.10.
Листинг 8.10.Запуск сценария randomquote
$ randomquote samplequotes.txt
Neither rain nor sleet nor dark of night…
$ randomquote samplequotes.txt
The rain in Spain stays mainly on the plane? Does the pilot know about this?
Усовершенствование сценария
Нетрудно создать файл с данными для сценария randomquote, содержащий список имен файлов графических изображений. Тогда с помощью этого сценария можно было бы организовать выбор случайного изображения. Немного подумав, вы найдете множество способов применения и развития этой идеи.
Глава 9. Администрирование веб-сервера
Если вы занимаетесь поддержкой веб-сервера или отвечаете за работу веб-сайта, простого или сложного, то наверняка регулярно решаете какие-то повторяющиеся задачи, такие как выявление недействительных внутренних или внешних ссылок. Многие из этих задач можно автоматизировать с использованием сценариев командной оболочки. То же касается некоторых типичных клиент/серверных задач, таких как управление доступом к информации в каталогах веб-сервера с использованием паролей.
№ 69. Выявление недействительных внутренних ссылок
Несколько сценариев в главе 7 продемонстрировали отдельные возможности текстового веб-браузера lynx, но в этой замечательной программе скрыто намного больше. Одна из таких возможностей, особенно полезная для администраторов веб-серверов, — функция traverse (включается флагом −traversal), заставляющая lynx опробовать все ссылки на сайте и отыскать среди них недействительные. Эту функцию можно задействовать в коротком сценарии, как тот, что показан в листинге 9.1.
Код
Листинг 9.1.Сценарий checklinks
#!/bin/bash
# checklinks — проверяет все внутренние ссылки на веб-сайте, сообщает
#·· о любых ошибках в файле "traverse.errors".
# Удалить по завершении все служебные файлы, созданные программой lynx.
trap "$(which rm) −f traverse.dat traverse2.dat" 0
if [-z "$1"]; then
··echo "Usage: checklinks URL" >&2
··exit 1
fi
baseurl="$(echo $1 | cut −d/ −f3 | sed 's/http: \/\///')"
lynx
−traversal −accept_all_cookies
−realm "$1" > /dev/null
if [-s "traverse.errors"]; then
··/bin/echo −n $(wc −l < traverse.errors) errors encountered.
··echo Checked $(grep '^http' traverse.dat | wc −l) pages at ${1}:
··sed "s|$1 ||g" < traverse.errors
··mv traverse.errors ${baseurl}.errors
··echo "A copy of this output has been saved in ${baseurl}.errors"
else
··/bin/echo −n "No errors encountered.";
··echo Checked $(grep '^http' traverse.dat | wc −l) pages at ${1}
fi
if [-s "reject.dat"]; then
··mv reject.dat ${baseurl}.rejects
fi
exit 0
Как это работает
Основная работа в этом сценарии выполняется программой lynx ; сам сценарий просто играет с файлами, которые создает lynx, извлекая из них информацию и отображая ее в удобочитаемом виде. В выходной файл reject.dat программа lynx записывает ссылки с внешними адресами URL (см. ниже сценарий № 70, который использует этот файл), в файл traverse.errors — недействительные ссылки (цель данного сценария), в файл traverse.dat — список всех проверенных страниц, и в файл traverse2.dat — тот же список страниц, что и в файл traverse.dat , но с дополнительно включенными заголовками всех исследованных страниц.
Команда lynx поддерживает большое количество разных аргументов, и в данном случае нам потребовалось использовать −accept_all_cookies , чтобы программа не замучила нас вопросами — принимать или нет cookie от страницы. Мы также использовали аргумент −realm, чтобы проверке подвергались только страницы указанного уровня на сайте и «ниже», а не все ссылки, которые будут встречены на пути. Без аргумента −realm программа lynx могла бы отыскать тысячи и тысячи страниц. Мы попробовали выполнить функцию −traversal для адреса http://www.intuitive.com/wicked/без −realm, и она обнаружила более 6500 страниц после более чем двухчасовой работы. С фла −r— realm было найдено 146 страниц, на исследование которых ушло несколько минут.
Запуск сценария
Чтобы запустить сценарий, просто передайте ему адрес URL в командной строке. Сценарий способен выполнить анализ любого веб-сайта, но имейте в виду: проверка таких гигантов, как Google или Yahoo! может затянуться навечно и закончиться исчерпанием места на вашем диске.
Результаты
Давайте проверим маленький веб-сайт на наличие ошибок (листинг 9.2).
Листинг 9.2.Проверка веб-сайта, не имеющего ошибок, с помощью checklinks
$ checklinks http://www.404-error-page.com/
No errors encountered. Checked 1 pages at http://www.404-error-page.com/
Как видите, все в порядке. А если проверить сайт немного большего размера? В листинге 9.3 показано, что мог бы вывести сценарий checklinks в результате проверки сайта, содержащего недействительные ссылки.
Читать дальшеИнтервал:
Закладка: