··' | grep "$pattern" | sed 's/[^0–9]//g')"
··# Сайт возвращает ответ в формате: "Illumination: NN%\n<\/span>"
··if ["$thedate" = "today"]; then
····echo "Today the moon is ${phase}% illuminated."
··else
····echo "On $thedate the moon = ${phase}% illuminated."
··fi
··exit 0
По аналогии с другими сценариями, извлекающими информацию из веб-запросов, основу сценария moonphase составляет код конструирования URL запроса и извлечения требуемого ответа из потока данных в формате HTML.
Анализ сайта показал, что поддерживается два вида адресов URL: один определяет текущую дату и имеет вид «phase/today», а другой — дату в прошлом или в будущем в формате MM/DD/YYYY, например: «phase/08/03/2017».
Задайте дату в правильном формате, и вы получите фазу Луны в указанный день. Но мы не можем просто добавить дату к доменному имени сайта, не выполнив некоторые проверки. С этой целью сценарий разбивает ввод пользователя на три поля — месяц, день и год — и затем проверяет строковые значения дня и года на ненулевую длину
. В сценарий можно было бы добавить еще несколько проверок на ошибки, о которых рассказывается в разделе «Усовершенствование сценария».
Самая хитрая часть любого сценария, извлекающего информацию из Интернета — правильное определение шаблона, позволяющего получить желаемые данные. В сценарии moonphase этот шаблон определяется в строке
. Самой длинной и сложной строкой (
) сценарий получает страницу с сайта moongiant.com и затем, с помощью последовательности команд grep и sed, извлекает строку, соответствующую заданному шаблону.
После этого остается только вывести освещенности для текущей или для указанной даты с использованием заключительной инструкции if/then/else.
При вызове без аргумента сценарий moonphase выводит освещенности для текущей даты. Попробуйте указать любой день в прошлом или в будущем в формате MM/DD/YYYY, как показано в листинге Б.6.
Листинг Б.6.Запуск сценария moonphase
$ moonphase 08/03/2121
On 08/03/2121 the moon = 74 % illuminated.
$ moonphase
Today the moon is 100 % illuminated.
$ moonphase 12/12/1941
On 12/12/1941 the moon = 43 % illuminated.
ПРИМЕЧАНИЕ
12 декабря 1941 года кинокомпания Universal выпустила на экраны кинотеатров классический фильм ужасов «The Wolf Man» («Человек-волк»). И в этот день Луна не была полной. Проверьте!
Усовершенствование сценария
С точки зрения внутренней реализации, сценарий можно было бы существенно усовершенствовать, добавив дополнительные проверки на ошибки или даже просто задействовав сценарий № 3 из главы 1, чтобы дать пользователям возможность вводить даты в разных форматах. Также инструкцию if/then/else в конце неплохо было бы заменить функцией, преобразующей значение процента освещенности в более общепринятые названия фаз луны, такие как «убывающая», «растущая» или номер четверти. На сайте NASA имеется веб-страница, которую можно использовать для определения разных фаз Луны: http://starchild.gsfc.nasa.gov/docs/StarChild/solar_system_level2/moonlight.html.
Произносится как «ше-банг». — Примеч. пер.
Символы «EOF» должны находиться в начале строки, т. е. перед ними не должно быть пробелов. Это требование синтаксиса встроенных документов. В оригинале это правило нарушено. В данном листинге перед всеми строками добавлены 2 пробела, чтобы не нарушить отступы. Они к делу не относятся, и в данном случае считается, что метка EOF находится в начале строки, без отступа. — Примеч. пер .
Тема: Внимание: ashley превысил квоту
Вы используете 539.7 Мбайт дискового пространства, тогда как вам выделено 500 Мбайт.
Это означает, что вам следует удалить некоторые ваши файлы, сжать файлы (с помощью простых и мощных программ сжатия ‘gzip’ или ‘bzip2’) или подать заявку на увеличение дисковой квоты для вас.
Спасибо за сотрудничество в этом вопросе.
Ваш непосредственный системный администратор.
Вам непонятно, о чем это мы? Это персонажи из замечательной серии иллюстрированных комиксов «Adventures of Tintin» (Приключения Тинтина), созданной бельгийским художником Эрже (Hergé) и вышедшей в середине XX века. Подробности смотрите на сайте: http://www.tintin.com/( https://ru.wikipedia.org/wiki/Приключения_Тинтина— Примеч. пер. ).
Читать дальше