Shellskript zur Bucharchivierung

Ich schreibe momentan an einem Shellskript zur Archivierung von Büchern einer Schülerbücherei. Es sieht bisher so aus, dass man, wenn man es in einer TTY aufruft, mit einem Menü in blauer Schrift auf weißem Hintegrund begrüßt wird, in dem Folgendes zur Option steht:

  • Durchblättern
  • Suchen
  • neuer Eintrag
  • Eintrag ändern
  • Eintrag löschen
  • Beenden

Ich habe das Programm „BiBo-Manager“ genannt, da die Bücherei „BiBo“ – was für „Bibliothek Bornbrook“ steht – heißt. Allerdings treten zur Zeit zwei wesentliche Probleme auf: Erstens bricht der weiße Hintergrund an Zeilenumbrüchen beim Blättern in den Einträgen ab, zweitens – und das ist die drastischere Problematik – funktioniert die Suchfunktion nicht. Ich zeige hier nun einmal das Skript für die Suche:

#!/bin/sh

# buch_suchen [Modus]
# Suchen von Einträgen anhand eines beliebigen Suchmusters

[ -z "$BUCHDB" ] && exit 1

echo ""
echo "  Bitte geben Sie einen Suchbegriff ein."
echo "  --> \c"
read SUCH
echo ""

cat $BUCHDB | grep $SUCH > buch.tmp
ANZ=`cat buch.tmp | wc -l | tr -d ' '`

if [ -z "$ANZ" -o "$ANZ" -eq 0 ]
then
  # kein Eintrag gefunden
  echo "  Für \"$SUCH\" wurde kein Eintrag gefunden. (Enter) \c"
  read EINGABE
else
  # es wurden Zeilen gefunden
  ORGDB="$BUCHDB"
  export BUCHDB=buch.tmp
  buch_zeilen "$ORGB" "$1"
fi

Beim Eingeben eines Stichwortes für die Suche wird auch, wie vorgesehen, das Suchergebnis – und es ist ein zutreffendes – in die temporäre Datei buch.tmp geschrieben, allerdings scheint die formatierte Ausgabe des Ergebnisses aus irgendeinem Grunde – warum auch immer – nicht zu funktionieren. Hier nun noch die Funktion buch_zeilen, die für die Durchführung von buch_suchen relevant ist:

#!/bin/sh

# buch_zeilen [Originalbasis] [Modus]
# Zeilenweises Auslesen des Archivs

[ -z "$BUCHDB" ] && exit 1

DATEI=`cat "$BUCHDB"`
ANZ=`echo "$DATEI" | wc -l | tr -d ' '`
ZHL=0

while [ "$ZHL" -lt "$ANZ" ]
do
  ZHL=`expr $ZHL + 1`

  ZEILE=`echo "$DATEI" | head -$ZHL | tail -1`

  echo "-------------------------------------------"
  echo "${ZHL}/${ANZ}"

  AUT=`echo "$ZEILE" | cut -d'#' -f1`
  TIT=`echo "$ZEILE" | cut -d'#' -f2`
  KTG=`echo "$ZEILE" | cut -d'#' -f3`
  VRL=`echo "$ZEILE" | cut -d'#' -f4`
  ISN=`echo "$ZEILE" | cut -d'#' -f5`
  INH=`echo "$ZEILE" | cut -d'#' -f6`
  ANM=`echo "$ZEILE" | cut -d'#' -f7`

  echo
  echo "$AUT - \"$TIT\" (${KTG})"
  echo "  Verlag    : $VRL"
  echo "  Inhalt    : $INH"
  echo "  ISBN      : $ISN"
  echo "  Sonstiges : $ANM"
  echo

  if [ "$2" = "loeschen" ]
  then
    # Löschen
    echo "  Soll dieser Eintrag gelöscht werden? (j/n) \c"
    read ANTW ; echo ""
    if [ -f "$1" -a "$ANTW" = "j" ]
    then
      # jetzt wird wirklich gelöscht
      cat $1 | grep -v "$ZEILE" > buch.rest
      cp buch.rest $1
      # rm buch.rest
      # Quittieren
      echo "Der Eintrag wurde gelöscht."
      echo "(Enter)\c" ; read EINGABE
    fi
  elif [ "$2" = "aendern" ]
  then
    # Datensatz ändern
    echo "  Soll dieser Eintrag geändert werden? (j/n) \c"
    read ANTW ; echo ""
    if [ -f "$1" -a "$ANTW" = "j" ]
    then
      # ändern heißt löschen ...
      cat $1 | grep -v "$ZEILE" > buch.rest
      cp buch.rest $1
      rm buch.rest
      # ...und neu einschreiben
      export AUT TIT KTG VRL ISN INH ANM
      # originale Datenbasis
      export BUCHDB="$1"
      buch_neu
      # Quittieren
      echo "Der Eintrag wurde geändert."
      echo "(Enter)\c" ; read EINGABE
    fi
  else
    # Einfach nur Blättern
    echo "(Enter)\c" ; read EINGABE
  fi
done

Ich bitte den, der sich in dem Bereich auskennt, mir, wenn es denn möglich ist, bei der Lösung dieses Problems zu helfen – am besten im Kommentar. Es wäre jedenfalls sehr nett.

Zementblog bei Facebook!    Zementblog bei Twitter folgen!

Hauptspeise

Dessert

Dir gefällt Zementblog? Unterstütze uns mit einer Spende bei PayPal - jeder Beitrag zählt!

Schreibe den ersten Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.