Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 15 Die Praxis
  gp 15.1 Alltägliche Lösungen
    gp 15.1.1 Auf alphabetische und numerische Zeichen prüfen
    gp 15.1.2 Auf Integer überprüfen
    gp 15.1.3 echo mit oder ohne -n
  gp 15.2 Datei-Utilities
    gp 15.2.1 Leerzeichen im Dateinamen ersetzen
    gp 15.2.2 Dateiendungen verändern
    gp 15.2.3 Nach veränderten Dateien in zwei Verzeichnissen vergleichen
  gp 15.3 Systemadministration
    gp 15.3.1 Benutzerverwaltung
    gp 15.3.2 Systemüberwachung
  gp 15.4 Backup-Strategien
    gp 15.4.1 Warum ein Backup?
    gp 15.4.2 Sicherungsmedien
    gp 15.4.3 Varianten der Sicherungen
    gp 15.4.4 Bestimmte Bereiche sichern
    gp 15.4.5 Backup über ssh mit tar
    gp 15.4.6 Daten mit rsync synchronisieren
    gp 15.4.7 Dateien und Verzeichnisse per E-Mail versenden
    gp 15.4.8 Startup-Scripts
  gp 15.5 World Wide Web und HTML
    gp 15.5.1 Analysieren von access_log (Apache)
    gp 15.5.2 Analysieren von error_log (Apache)
  gp 15.6 CGI (Common Gateway Interface)
    gp 15.6.1 CGI-Scripts ausführen
    gp 15.6.2 CGI-Environment ausgeben
    gp 15.6.3 Einfache Ausgabe als Text
    gp 15.6.4 Ausgabe als HTML formatieren
    gp 15.6.5 Systeminformationen ausgeben
    gp 15.6.6 Kontaktformular
    gp 15.6.7 Noch ein Tipp

Kapitel 15 Die Praxis

In diesem Kapitel finden Sie viele Lösungsansätze zu gewöhnlichen Themen, die man relativ häufig in der Praxis benötigt. Natürlich darf man hier keine kompletten Projekte erwarten, sondern eher Scripts, die weiter ausbaufähig sind bzw. als Anregung für umfangreichere Projekte dienen sollen. Es ist auch gar nicht möglich, für jedes Problem eine ultimative Lösung aus dem Hut zu zaubern, dazu sind die individuellen Ansprüche der einzelnen Anforderungen zu unterschiedlich.

Die einzelnen Rezepte für die Praxis wurden in die folgenden Teile aufgegliedert:

gp  Alltäglich benötigte Scripts
gp  Datei-Utilities
gp  Systemadministration
Benutzer- und Prozessverwaltung (Überwachung) Systemüberwachung Backups (init-Scripts) Startup-Scripts erstellen
gp  Netzwerk und Internet
E-Mail Log-File-Analyse CGI-Scripts

Hinweis   Suchen Sie ein Sammelsurium von Shellscripts für Teil- bzw. Komplettlösungen, dann kann ich Ihnen die Webseiten www.shelldorado.de und http://www.freshmeat.net empfehlen.



Rheinwerk Computing

15.1 Alltägliche Lösungedowntop


Rheinwerk Computing

15.1.1 Auf alphabetische und numerische Zeichen prüfen  downtop

Ein Problem bei vielen Scripts, die eine User-Eingabe erfordern, ist, dass ein »Vertipper« Dinge wie einen Datenbankschlüssel oder Dateinamen schnell durcheinander bringt. Eine Überprüfung auf die richtige Eingabe von der Tastatur fällt mittels sed recht einfach aus. Das folgende Beispiel überprüft, ob der Anwender Buchstaben und Zahlen korrekt eingegeben hat. Nicht erlaubt sind alle anderen Zeichen wie Whitespaces, Punktationen, Sonderzeichen etc.

#!/bin/sh
# checkInput() : Überprüft, dass eine richtige Eingabe aus
# alphabetischen und numerischen Zeichen besteht
# Gibt 0 (=OK) zurück, wenn alle Zeichen aus
# Groß- und Kleinbuchstaben und Zahlen bestehen,
# ansonsten wird 1 zurückgegeben.
#
checkInput() {
  if [ -z "$eingabe" ]
  then
     echo "Es wurde nichts eingegeben"
     exit 1
  fi
  # Alle unerwünschten Zeichen entfernen ...
  eingabeTmp="`echo $1 | sed -e 's/[^[:alnum:]]//g'`"
  # ... und dann vergleichen
  if [ "$eingabeTmp" != "$eingabe" ]
  then
     return 1
  else
     return 0
  fi
}
# Ein Beispiel zum Testen der Funktion checkInput
echo -n "Eingabe machen: "
read eingabe
if ! checkInput "$eingabe"
then
   echo "Die Eingabe muss aus Buchstaben und Zahlen bestehen!"
   exit 1
else
   echo "Die Eingabe ist Ok."
fi

Das Script bei der Ausführung:

you@host > ./checkInput
Eingabe machen: 1234asdf
Die Eingabe ist Ok.
you@host > ./checkInput
Eingabe machen: asfd 1234
Die Eingabe muss aus Buchstaben und Zahlen bestehen!
you@host > ./checkInput
Eingabe machen: !"§$
Die Eingabe muss aus Buchstaben und Zahlen bestehen!

Entscheidend ist in diesem Script die sed-Zeile:

eingabeTmp="`echo $1 | sed -e 's/[^[:alnum:]]//g'`"

In der Variablen eingabeTmp befindet sich nach der Kommandosubstitution ein String ohne irgendwelche Sonderzeichen außer Buchstaben und Ziffern (siehe Zeichenklasse [:alnum:]). Hierbei werden einfach alle anderen Zeichen aus dem Originalstring entfernt und im nächsten Schritt wird der Originalstring mit dem so neu erstellten verglichen. Sind beide weiterhin identisch, wurden die Bedingungen erfüllt und die Eingabe war in Ordnung. Ansonsten, wenn beide Strings nicht gleich sind, wurde ein »Fehler« bei der Eingabe entdeckt.


Rheinwerk Computing

15.1.2 Auf Integer überprüfen  downtop

Leider kann man hierbei jetzt nicht mit [:digits:] in der sed-Zeile auf die Eingabe eines echten Integer prüfen, da zum einen ein negativer Wert eingegeben werden kann und es zum anderen auch minimale und maximale Grenzen des Größenbereichs gibt. Daher müssen Sie das Script bzw. die Funktion ein wenig anpassen, um auch diese Aspekte zu berücksichtigen. Hier das Script, welches die Eingabe einer Integerzahl überprüft:

#!/bin/sh
# checkInt() : Überprüft, ob ein echter
# Integerwert eingegeben wurde
# Gibt 0 (== OK) zurück, wenn es sich um einen gültigen
# Integerwert handelt, ansonsten 1
#
checkInt() {
    number="$1"
    # Mindestwert für einen Integer (ggf. anpassen)
    min=-2147483648
    # maximaler Wert für einen Integer (ggf. anpassen)
    max=2147483647
   if [ -z $number ]
   then
      echo "Es wurde nichts eingegeben"
      exit 1
   fi
   # Es könnte ein negativer Wert sein ...
   if [ "${number%${number#?}}" = "-" ]
   then  # es ist ein negativer Wert – erstes Zeichen ein "-"
      # das erste Zeichen nicht übergeben
      testinteger="${number#?}"
   else
      testinteger="$number"
   fi
   # Alle unerwünschten Zeichen außer Zahlen entfernen ...
   extract_nodigits="`echo $testinteger | \
                      sed 's/[[:digit:]]//g'`"
   # Ist jetzt noch was vorhanden
  if [ ! -z $extract_nodigits ]
  then
     echo "Kein numerisches Format!"
     return 1
  fi
  # Mindestgrenze eingehalten ...
  if [ "$number" -lt "$min" ]
  then
     echo "Der Wert ist unter dem erlaubten Mindestwert : $min"
     return 1
  fi
  # max. Grenze eingehalten
  if [ "$number" -gt "$max" ]
  then
     echo "Der Wert ist über dem erlaubten Maximalwert : $max"
     return 1
  fi
  return 0 # Ok, es ist ein Integer
}
# Ein Beispiel zum Testen der Funktion checkInput
#
echo -n "Eingabe machen: "
read eingabe
if ! checkInt "$eingabe"
then
   echo "Falsche Eingabe – Kein Integer"
   exit 1
else
   echo "Die Eingabe ist Ok."
fi

Das Script bei der Ausführung:

you@host > ./checkInt
Eingabe machen: 1234
Die Eingabe ist Ok.
you@host > ./checkInt
Eingabe machen: –1234
Die Eingabe ist Ok.
you@host > ./checkInt
Eingabe machen: –123412341234
Der Wert ist unter dem erlaubten Mindestwert : –2147483648
Falsche Eingabe – Kein Integer
you@host > ./checkInt
Eingabe machen: 123412341234
Der Wert ist über dem erlaubten Maximalwert : 2147483647
Falsche Eingabe – Kein Integer

Rheinwerk Computing

15.1.3 echo mit oder ohne -n  toptop

Wen es bislang genervt hat, ob denn nun seine Shell die Option –n für das Verhindern eines Zeilenumbruchs nach einer echo-Ausgabe oder das Escape-Zeichen \c kennt, und sich nicht darauf verlassen will, dass print oder printf auf dem System vorhanden ist, dem kann mit einer einfachen Funktion geholfen werden:

#!/bin/sh
# myecho() : Portables echo ohne Zeilenumbruch
myecho() {
   # Weg mit dem Newline, falls vorhanden
   echo "$*" | tr -d '\n'
}
# Zum Testen ...
#
myecho "Eingabe machen : "
read eingabe


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
 << zurück
  
  Zum Katalog
Zum Katalog: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Katalog: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Katalog: Linux Handbuch






 Linux Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de