--- /dev/null
+#!/bin/bash
+# Copyright (C) 2014 Ian Kelling
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+isdiff() {
+ local help="Usage: isdiff [--help|-h] [-v] [-x] FILE1 FILE2
+Test if FILE1 and FILE2 have the same contents
+
+Returns 0 for same, 1 for diff, 2 for error.
+
+-v verbose
+-r use most reliable checksum available, ie. sha instead of md5"
+
+ local v x y reliable
+ while true; do
+ if [[ $1 == --help ]] || [[ $1 == -[^-]* && $1 == *h* ]]; then
+ echo "$help"
+ return
+ elif [[ $1 == -[^-]* && $1 == *v* ]]; then
+ v=true
+ shift
+ elif [[ $1 == -[^-]* && $1 == *r* ]]; then
+ reliable=true
+ shift
+ else
+ break
+ fi
+ done
+
+ x=($(type -p sha512sum) $(type -p sha256sum) $(type -p sha1sum) $(type -p md5sum))
+ if [[ $reliable ]]; then
+ sumbinary=$x
+ else
+ sumbinary=${x[${#x[@]}-1]}
+ fi
+
+ [[ $sumbinary ]] || {
+ echo "Need 1 of sha512sum sha256sum sha1sum or md5sum for sum() function"
+ return 1
+ }
+ if [[ $# != 2 ]]; then
+ [[ $v ]] && echo Error: need 2 arguments.
+ return 2
+ fi
+ if [[ $v ]]; then
+ x=$($sumbinary < "$1" ) || return 2
+ y=$($sumbinary < "$2" ) || return 2
+ else
+ { x=$($sumbinary < "$1" ) ;} 2>/dev/null || return 2
+ { y=$($sumbinary < "$2" ) ;} 2>/dev/null || return 2
+ fi
+ if [[ $x == "$y" ]]; then
+ return 1 # same
+ else
+ [[ $v ]] && echo "$1" "$2" different.
+ return 0
+ fi
+}
+isdiff "$@"