#!/usr/bin/env bash # TIFF parser test driver if [ "${BASH_VERSION:0:1}" -lt "4" ]; then echo "$0 requires bash v4 or greater. Running $BASH_VERSION. $0 skipped." exit 0 fi exifprobe() { f=$1 # References # process pipe : http://stackoverflow.com/questions/7612320/bash-weird-variable-scope-when-populating-array-with-results # to uppercase : http://unix.stackexchange.com/questions/51983/bash-how-to-uppercase-the-command-line-argument # --------------------------------------- # Parse -pa output # Exif.Image.ImageDescription Ascii 18 Created with GIMP tags=() typs=() lens=() vals=() while read line; do tag=$(echo $line|cut -f 3 -d. | cut -f 1 -d' ' ) ; tags+=($tag) typ=$(echo $line|cut -f 2- -d' ' | sed -e 's/ +/ /g' -e 's/^ //' | cut -f 1 -d' ' ); typs+=($typ) len=$(echo $line|cut -f 2- -d' ' | sed -e 's/ +/ /g' -e 's/^ //' | cut -f 2 -d' ' ); lens+=($len) val=$(echo $line|cut -f 2- -d' ' | sed -e 's/ +/ /g' -e 's/^ //' | cut -f 3- -d' ' ); vals+=("$val") done < <( runTest exiv2 -pa $f 2>/dev/null ) # process pipe count=${#tags[@]} echo exiv2 -pa output index=0 while [ $index -lt $count ]; do tag=${tags[$index]} typ=${typs[$index]} len=${lens[$index]} val=${vals[$index]} echo ${tag} $'\t' ${typ} $'\t' ${len} $'\t' '"'${val}'"' index=$((index+1)) done # Parse -pS output # address | tag | type | count | offset | value # 254 | 0x00fe NewSubfileType | LONG | 1 | 0 | 0 TAGS=() TYPS=() LENS=() OFFS=() VALS=() k=0 while read line; do k=$((k+1)) # skip the first couple of lines if [ $k -gt 2 ]; then TAG=$(echo $line| cut -f 2 -d'|' | cut -f 3 -d' ' ); TAGS+=($TAG); TYP=$(echo $line| cut -f 3 -d'|' | sed -e's/ +//g' ); TYPS+=($TYP) LEN=$(echo $line| cut -f 4 -d'|' | sed -e's/ +//g' ); LENS+=($LEN) OFF=$(echo $line| cut -f 5 -d'|' | sed -e's/ +//g' ); OFFS+=($OFF) VAL=$(echo $line| cut -f 6- -d'|' | sed -e's/^ //' ); VALS+=($"$VAL") fi done < <( runTest exiv2 -pS $f | grep -v '^END' 2>/dev/null ) COUNT=${#TAGS[@]} echo '' echo exiv2 -pS output INDEX=0 while [ $INDEX -lt $COUNT ]; do TAG=${TAGS[$INDEX]} TYP=${TYPS[$INDEX]} LEN=${LENS[$INDEX]} OFF=${OFFS[$INDEX]} VAL=${VALS[$INDEX]} echo ${TAG} $'\t' ${TYP} $'\t' ${LEN} $'\t' '"'${VAL}'"' INDEX=$((INDEX+1)) done # --------------------------------------- # Compare echo '' echo "Analysis" echo "count = " $count "COUNT = " $COUNT index=0 while [ $index -lt $count ]; do TAG=${TAGS[$index]} tag=${tags[$index]} if [ "$TAG" != "$tag" ]; then echo TAG $TAG $tag mismatch ; fi TYP=${TYPS[$index]^^} # to uppercase typ=${typs[$index]^^} if [ "$TYP" != "$typ" ]; then echo TYPE $TYP $typ mismatch ; fi LEN=${LENS[$index]} len=${lens[$index]} if [ "$LEN" != "$len" ]; then echo Length $LEN $len mismatch ; fi VAL=${VALS[$index]} val=${vals[$index]} if [[ "${typ}" == "ASCII" && "$VAL" != "$val" ]]; then echo Value $VAL $val mismatch ; fi index=$((index+1)) done } # ---------------------------------------------------------------------- # Setup source ./functions.source ( testfile=mini9.tif copyTestFile ${testfile} exifprobe ${testfile} runTest tiff-test ${testfile} exifprobe ${testfile} ) > $results 2>&1 reportTest # That's all Folks! ##