#!/bin/sh
#
# MD5- und sum-Prüfsumme der als Argumente angegebenen Dateien berechnen
#
# 26.3.2006

# bei Null Argumenten --> Fehlermeldung und Abbruch
(($#)) ||
{
  echo 'Mindestens ein Argument muss angegeben werden!'
  exit 1
}

# Prüfsummen berechnen und ausgeben
function check_sums()
{
  local kommando resultat
  # In einer Schleife führen wir die Kommandos "md5sum" und "sum" aus. Um eine
  # übersichtlichere Ausgabe zu erhalten, sorgen wir dafür, dass die beiden
  # Kommando-Namen die gleiche Länge haben, indem wir bei "sum" eine
  # entsprechende Anzahl Leerzeichen auffüllen.
  for kommando in md5sum 'sum   '
  do
    # den Kommando-Namen ohne anschließende Zeilenschaltung ausgeben
    echo -n "  $kommando: "
    # Wir ermitteln das Resultat (die Ausgabe) des betreffenden
    # Prüfsummen-Kommandos über eine Kommando-Substitution. Die zusätzlichen
    # Leerzeichen bei "sum" stören hier nicht, weil sie durch die nach der
    # Parameter-Substitution erfolgende Aufspaltung in Wörter eliminiert
    # werden, was hier der Fall ist, weil wir IFS auf dem Standard-Wert
    # belassen haben.
    if resultat=$($kommando "$1" 2>/dev/null)
    then
      # Die Prüfsummen-Berechnung war erfolgreich. Wir geben maximal die ersten
      # 32 Zeichen aus. Bei MD5 ist das genau die Prüfsumme. Der dahinter
      # folgende Dateiname wird dadurch weggeschnitten. Bei "sum" ist die
      # Prüfsumme deutlich kürzer, so dass das Abschneiden nicht stört.
      echo "${resultat:0:32}"
    else
      # Fehler bei der Prüfsummen-Berechnung
      echo Fehler
    fi
  done
}

# die Liste der Positionsparameter (Argumente) durchlaufen
for arg
do
  echo "$arg"
  check_sums "$arg"
  echo '------'
done

# Erfolg melden
exit 0

