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

Шрифт
Интервал

>··echo "Usage: $(basename $0) image" >&2

>··exit 1

>fi

>for filename

>do

>··identify −format "%[EXIF:*]" "$filename" | grep GPSL > $tempfile

>··latdeg=$(head -1 $tempfile | cut  −f— f1 | cut −d= −f2)

>··latdeg=$(scriptbc −p 0 $latdeg)

>··latmin=$(head -1 $tempfile | cut −d, −f2)

>··latmin=$(scriptbc −p 0 $latmin)

>··latsec=$(head -1 $tempfile | cut −d, −f3)

>··latsec=$(scriptbc $latsec)

>··latorientation=$(sed −n '2p' $tempfile | cut −d= −f2)

>··longdeg=$(sed −n '3p' $tempfile | cut −d, −f1 | cut −d= −f2)

>··longdeg=$(scriptbc −p 0 $longdeg)

>··longmin=$(sed −n '3p' $tempfile | cut −d, −f2)

>··longmin=$(scriptbc −p 0 $longmin)

>··longsec=$(sed −n '3p' $tempfile | cut −d, −f3)

>··longsec=$(scriptbc $longsec)

>··longorientation=$(sed −n '4p' $tempfile | cut −d= −f2)

>··echon "Coords: $latdeg ${latmin}' ${latsec}\" $latorientation, "

>··echo "$longdeg ${longmin}' ${longsec}\" $longorientation"

>done

>exit 0

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

Каждый раз, исследуя приемы использования пакета ImageMagick, мы находим другие параметры и другие способы применения его возможностей. В данном случае аргумент −format извлекает из EXIF изображения только один определенный параметр.

Обратите внимание, что здесь роль шаблона в команде grep играет строка GPSL, а не GPS. Благодаря этому отфильтровывается вся дополнительная информация, связанная с GPS, которая нам не нужна. Попробуйте убрать символ L, и вы увидите, как много других сведений из блока с EXIF-данными будет выведено на экран!

Затем остается только извлечь конкретные поля и решить несколько уравнений с помощью scriptbc, чтобы преобразовать данные в более понятный формат, как можно видеть в строках latdeg

.

Суть использования конвейера с несколькими командами cut должна быть вам уже знакома. Это чрезвычайно удобный для сценариев инструмент!

После извлечения всех данных и решения всех уравнений необходимо вновь собрать информацию в виде, совместимом со стандартной формой записи широты и долготы

. Вот и все!

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

Передайте сценарию файл изображения, и, если он включает информацию о широте и долготе, сценарий преобразует ее в формат, понятный Google Maps, Bing Maps и другим программам для отображения карт, как показано в листинге 14.10.

Результаты

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

>$ geoloc parking-lot-with-geotags.jpg

>Coords: 40 3' 19.73" N, 103 12' 3.72" W

>$

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

Что получится, если передать сценарию фотографию, в которой отсутствует информация EXIF? Сценарий должен обрабатывать эту ситуацию, а не просто выводить уродливое сообщение об ошибке, полученное от программы bc, потерпевшей неудачу, или пустые координаты. Вы согласны? Дополнительные проверки информации GPS с координатами, извлекаемой с помощью ImageMagick, были бы полезным дополнением.

Глава 15. Дни и даты

Вычисления с датами порой бывают очень запутанными, например, когда нужно выяснить, високосный ли указанный год, сколько дней осталось до Нового года или сколько дней вы прожили. В этой области между Unix-системами, такими как OS X, и системами Linux, с их инструментами GNU, лежит глубокая пропасть. Дэвид Маккензи (David MacKenzie), взявший на себя труд переписать утилиту date для GNU-версии Linux, значительно расширил ее возможности.

Если вы пользуетесь OS X или другой системой, где команда date −version выводит сообщение об ошибке, загрузите комплект основных утилит, в состав которого входит расширенная утилита GNU date (иногда устанавливается как gdate). В OS X это можно выполнить с помощью диспетчера пакетов (не установлен по умолчанию, но установить его легко):

>$ brew install coreutils

После установки GNU-версии утилиты date определить, високосный ли указанный год, можно с помощью самой программы, без необходимости путаться в сложных правилах о годах, кратных 4, но не 100, и других:

>if [$(date 12/31/$year +%j) −eq 366]

Иными словами, если последним днем года является 366-й, этот год — високосный.

Еще одна замечательная особенность GNU date — возможность вернуться назад во времени. Стандартная команда date в системе Unix основана на понятии «нулевого времени» или дате эпохи: 00:00:00 по Гринвичу 1 января 1970 года. Хотите узнать что-нибудь о происходившем в 1965? Тогда вам не повезло. К счастью, с тремя остроумными сценариями в этой главе вы сможете в полной мере использовать преимущества GNU date.

№ 99. Определение дня недели в указанную дату в прошлом

Вкратце: в какой день недели вы родились? В какой день недели Нил Армстронг и Базз Олдрин ступили на Луну? Сценарий в листинге 15.1 поможет вам быстро найти ответы на эти типичные вопросы и наглядно продемонстрирует мощь GNU date.

Код

Листинг 15.1. Сценарий dayinpast

>#!/bin/bash

># dayinpast — получая дату, сообщает соответствующий ей день недели.

>if [$# −ne 3]; then

>··echo "Usage: $(basename $0) mon day year" >&2

>··echo " with just numerical values (ex: 7 7 1776)" >&2

>··exit 1

>fi

>date −version > /dev/null 2>&1 # Отбросить сообщение об ошибке, если появится.

>baddate="$?"····················# И сохранить только возвращаемый код.

>if [! $baddate]; then

>

··date −d $1/$2/$3 +"That was a %A."

>else

>··if [$2 −lt 10]; then

>····pattern=" $2[^0–9]"


Рекомендуем почитать
Виртуальные  машины: несколько компьютеров в  одном

Применение виртуальных машин дает различным категориям пользователей — от начинающих до IT-специалистов — множество преимуществ. Это и повышенная безопасность работы, и простота развертывания новых платформ, и снижение стоимости владения. И потому не случайно сегодня виртуальные машины переживают второе рождение.В книге рассмотрены три наиболее популярных на сегодняшний день инструмента, предназначенных для создания виртуальных машин и управления ими: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels.


FAQ по смартфону Qtek 8300/8310

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Недокументированные и малоизвестные возможности Windows XP

Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows.


Windows Vista. Мультимедийный курс

Эта книга поможет вам разобраться в премудростях операционной системы Windows Vista.Информационная насыщенность учебного материала позволяет утверждать, что мультимедийный курс будет интересен и новичкам, и опытным пользователям.


Отладка систем реального времени

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Свободные программы и системы в школе

Курс лекций, включенных в брошюру, знакомит читателя с популярными свободными программами и системами, полезными при преподавании информатики в средней школе. В обзор вошли основы открытых операционных систем, сведения о пакете «офисных» программ OpenOffice.org, коммуникационном пакете Mozilla, графическом редакторе GIMP, современных графических средах GNOME и KDE и других программах.Для преподавателей информатики и методистов, а также для студентов и аспирантов соответствующих специальностей.© 2002-3, Максим Отставнов.© 2002, Андрей Добровольский (раздел 3.1).Использован текст лекций, публиковавшихся автором в приложении к газете «Первое сентября» «Информатика» (http://inf.1september.ru) в 2002-3 г., материалы брошюры «Прикладные свободные программы в школе» (М.: 2003 г.), а также фрагменты статей, ранее публиковавшихся в журналах «Компьютерра» и «Домашний компьютер».Материалы, представленные в этой книге, также доступны в Интернет на странице www.otstavnov.com/fsft на условиях Свободной лицензии ГНУ на документацию (GNU FDL)