では、シェルスクリプトを作成してみましょう。今回のシェルスクリプト(photo_gps.sh)は、次のようになります。「アプリケーションID」の部分は、先ほど発行したものに書き換えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#!/bin/bash ##Yahoo! JAPANのアプリケーションID yahoo_appid="アプリケーションID" ## 地図の大きさ、縮尺 width="300" height="200" scale="15" identify -verbose $1 | grep -e "exif:DateTime:" -e "exif:GPSLatitude" -e "exif:GPSLongitude" > /tmp/gps_data ## 撮影時刻取得 photo_date_time=$(cat /tmp/gps_data | grep "exif:DateTime:" | sed "s/exif:DateTime://") photo_date=$(echo ${photo_date_time} | cut -f 1 -d " ") photo_time=$(echo ${photo_date_time} | cut -f 2 -d " ") ## 緯度・経度の取得関数 function coordinate () { gps=$(cat /tmp/gps_data | grep $1 | sed "s/$1//") gps_do=$(echo ${gps} | tr "/" "," | cut -f 1 -d ",") gps_fun=$(echo ${gps} | tr "/" "," | cut -f 3 -d ",") gps_byo=$(echo ${gps} | tr "/" "," | cut -f 5 -d ",") gps=$(echo "scale=5;${gps_do} + ${gps_fun} / 60 + ${gps_byo} / 360000" | bc) gps_ref=$(cat /tmp/gps_data | grep "$2" | sed "s/$2//") test ${gps_ref} = $3 && printf "-" printf ${gps} } ## 緯度・経度の取得 gps_latitude=$(coordinate exif:GPSLatitude: exif:GPSLatitudeRef: S) gps_longitude=$(coordinate exif:GPSLongitude: exif:GPSLongitudeRef: W) ##HTMLファイル生成 echo "<!DOCTYPE html>" > photo.html echo "<html lang='ja'>" >> photo.html echo "<head>" >> photo.html echo "<meta charset='UTF-8'>" >> photo.html echo "<title>撮影日時・場所</title>" >> photo.html echo "</head>" >> photo.html echo "<body>" >> photo.html echo "<p>ファイル名:$1<br>" >> photo.html echo "撮影日:${photo_date}<br>" >> photo.html echo "撮影時間:${photo_time}</p>" >> photo.html echo "<p>撮影場所:<br>" >> photo.html echo "<img width=${width} height=${height} src='https://map.yahooapis.jp/map/V1/static?appid=${yahoo_appid}&lat=${gps_latitude}&lon=${gps_longitude}&z=${scale}&width=${width}&height=${height}&pointer=on'>" >> photo.html echo "</p>" >> photo.html echo "</body>" >> photo.html echo "</html>" >> photo.html |
それでは、シェルスクリプトを1行ずつ見ていきましょう。1行目は「シェバン」です。シェバンについては、第1回に説明しました。今までは「#!/bin/sh」を記述して、「sh」を「インタープリタ」(インタープリタについても第1回を参照)として利用していました。今回は「#!/bin/bash」として「Bash」を利用します。
shは「Bourne Shell」と呼ばれる古くからあるシェルです。現在はBourne Shellではなく、代替となるシェルがリンクされています。次のコマンドで代替シェルを確認できます。
1 2 |
$ ls -l /bin/sh lrwxrwxrwx 1 root root 4 Feb 14 09:49 /bin/sh -> dash |
上はUbuntu 18.04 LTSでの実行例ですが、「dash」(Debian Almquist shell)というシェルが代替となっています。「緯度」と「経度」は同じ処理なので、「関数」にしておくと便利ですが、dashの場合、関数(fuction)が使えません。よって、関数が使えるBashをインタープリタとして利用しました。
3行目の「#」で始まる行は「コメント」です。6行目、13行目、18行目、30行目、34行目もコメントになります。