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 5 Terminal-Ein- und Ausgabe
  gp 5.1 Von Terminals zu Pseudo-Terminals
  gp 5.2 Ausgabe
    gp 5.2.1 Der echo-Befehl
    gp 5.2.2 print (Korn-Shell only)
    gp 5.2.3 Der Befehl printf
    gp 5.2.4 Der Befehl tput – Terminalsteuerung
  gp 5.3 Eingabe
    gp 5.3.1 Der Befehl read
    gp 5.3.2 (Zeilenweise) Lesen einer Datei mit read
    gp 5.3.3 Zeilenweise mit einer Pipe aus einem Kommando lesen (read)
    gp 5.3.4 Here-Dokumente (Inline-Eingabeumleitung)
    gp 5.3.5 Here-Dokumente mit read verwenden
    gp 5.3.6 Die Variable IFS
    gp 5.3.7 Arrays einlesen mit read (Bash und Korn-Shell only)
    gp 5.3.8 Shell-abhängige Anmerkungen zu read
    gp 5.3.9 Einzelnes Zeichen abfragen
    gp 5.3.10 Einzelne Zeichen mit Escape-Sequenzen abfragen
    gp 5.3.11 Passworteingabe
  gp 5.4 Umlenken mit dem Befehl exec
  gp 5.5 Filedeskriptoren
    gp 5.5.1 Einen neuen Filedeskriptor verwenden
    gp 5.5.2 Die Umlenkung <>
  gp 5.6 Named Pipes
  gp 5.7 Menüs mit select (Bash und Korn-Shell only)
  gp 5.8 dialog und Xdialog
    gp 5.8.1 Entscheidungsfrage --yesno
    gp 5.8.2 Nachrichtenbox mit Bestätigung --msgbox
    gp 5.8.3 Hinweisfenster ohne Bestätigung --infobox
    gp 5.8.4 Text-Eingabezeile --inputbox
    gp 5.8.5 Ein einfacher Dateibetrachter --textbox
    gp 5.8.6 Ein Menü --menu
    gp 5.8.7 Auswahlliste zum Ankreuzen --checklist
    gp 5.8.8 Radiobuttons zum Auswählen --radiolist
    gp 5.8.9 Fortschrittszustand anzeigen --gauge
    gp 5.8.10 Verändern von Aussehen und Ausgabe
    gp 5.8.11 Kleines Beispiel
    gp 5.8.12 Zusammenfassung
  gp 5.9 gnuplot – Visualisierung von Messdaten
    gp 5.9.1 Wozu wird gnuplot eingesetzt?
    gp 5.9.2 gnuplot starten
    gp 5.9.3 Das Kommando zum Plotten
    gp 5.9.4 Variablen und Parameter für gnuplot
    gp 5.9.5 Ausgabe von gnuplot umleiten
    gp 5.9.6 Variablen und eigene Funktionen definieren
    gp 5.9.7 Interpretation von Daten aus einer Datei
    gp 5.9.8 Alles bitte nochmals zeichnen (oder besser speichern und laden)
    gp 5.9.9 gnuplot aus einem Shellscript heraus starten (der Batch-Betrieb)
    gp 5.9.10 Plot-Styles und andere Ausgaben festlegen
    gp 5.9.11 Tricks für die Achsen
    gp 5.9.12 Die dritte Dimension
    gp 5.9.13 Zusammenfassung


Rheinwerk Computing

5.4 Umlenken mit dem Befehl exetoptop

Mit dem Befehl exec können Sie sämtliche Ein- bzw. Ausgaben von Kommandos eines Shellscripts umleiten. Hier die Syntax:

# Standardausgabe nach Ausgabedatei umlenken
exec >Ausgabedatei
# Standardausgabe nach Ausgabedatei umlenken
# und ans Ende der Datei anfügen
exec >>Ausgabedatei
# Standardfehlerausgabe nach Ausgabedatei umlenken
exec 2>Fehler_Ausgabedatei
# Standardfehlerausgabe nach Ausgabedatei umlenken
# und ans Ende der Datei anfügen
exec 2>>Fehler_Ausgabedatei
# Standardeingabe umlenken
exec <Eingabedatei

Hierzu ein einfaches Beispiel:

# Demonstriert eine Umlenkung mit exec
# aexec1
# Wird noch auf dem Bildschirm ausgegeben
echo "$0 wird ausgeführt"
exec >ausgabe.txt
# Alle Ausgaben ab hier in die Datei "ausgabe.txt"
val=`ls -l | wc -l`
echo "Im Verzeichnis $HOME befinden sich $val Dateien"
echo "Hier der Inhalt: "
ls -l

Das Script bei der Ausführung:

you@host > ./aexec1
./aexec1 wird ausgeführt
you@host > cat ausgabe.txt
Im Verzeichnis /home/tot befinden sich 44 Dateien
Hier der Inhalt:
insgesamt 1289
-rwxr--r--  1 tot users     188 2005–02–24 04:31 acase1
-rw-r--r--  1 tot users     277 2005–02–24 02:44 acase1~
-rwxr--r--  1 tot users     314 2005–03–06 11:17 aecho1
...

Die Ausführung des Scripts ist einfach. Die komplette Standardausgabe wird hier mittels

exec >ausgabe.txt

in die Datei ausgabe.txt umgeleitet. Alles, was sich vor dieser Zeile befindet, wird noch wie gewöhnlich auf dem Bildschirm ausgegeben. Wollen Sie im Beispiel eventuell auch auftretende Fehlermeldungen in eine Datei umleiten, können Sie exec wie folgt erweitern:

exec >ausgabe.txt 2>fehlerausgabe.txt

Jetzt werden auftretende Fehlermeldungen ebenfalls in eine separate Datei namens fehlerausgabe.txt geschrieben.

Die Umlenkung der Eingabe erfolgt nach demselben Schema. Alle entsprechenden Eingabekommandos erhalten dann ihre Daten aus einer entsprechenden Datei.

# Demonstriert eine Umlenkung mit exec
# aexec2
# Alle Eingaben im Script werden hier von data.dat entnommen
exec <data.dat
printf "%-15s %-15s %-8s\n" "Nachname" "Vorname" "Telefon"
printf "+%-15s+%-15s+%-8s\n" "--------" "-------" "-------"
while read vorname nachname telefon
do
   printf " %-15s  %-15s  %-8d\n" $nachname $vorname $telefon
done

Das Script bei der Ausführung:

you@host > cat data.dat
Jürgen Wolf 1234
Frank Zane 3213
Mike Katz 3213
Mike Mentzer 1343
you@host > ./aexec2
Nachname        Vorname         Telefon
+--------       +-------        +-------
 Wolf             Jürgen          1234
 Zane             Frank           3213
 Katz             Mike            3213
 Mentzer          Mike            1343

Bitte beachten Sie aber, dass jedes Kommando an der Position des letzten Lesekommandos fortfährt. Würden Sie z. B. im Script »axec2« beim ersten Schleifendurchlauf abbrechen und anschließend einen erneuten Durchlauf starten, so würde der zweite Durchlauf dort weitermachen, wo sich der erste Durchlauf beendet hat, beispielsweise würden Sie mit dem leicht modifizierten Script »axec3« dasselbe erreichen wie mit »axec2«.

# Demonstriert eine Umlenkung mit exec
# aexec3
# Wird noch auf dem Bildschirm ausgegeben
echo "$0 wird ausgeführt"
# Alle Eingaben im Script werden hier von data.dat entnommen
exec <data.dat
printf "%-15s %-15s %-8s\n" "Nachname" "Vorname" "Telefon"
printf "+%-15s+%-15s+%-8s\n" "--------" "-------" "-------"
while read vorname nachname telefon
do
   printf " %-15s  %-15s  %-8d\n" $nachname $vorname $telefon
   break # Hier wird testweise nach einem Durchlauf abgebrochen
done
while read vorname nachname telefon
do
   printf " %-15s  %-15s  %-8d\n" $nachname $vorname $telefon
done

Dass dies so ist, liegt am Filedeskriptor, welcher in seinem Dateitabelleneintrag u. a. auch die aktuelle Lese-/Schreibposition enthält. Zu den Filedeskriptoren kommen wir gleich im nächsten Abschnitt.

Den Vorteil der Verwendung von exec kann man hier zwar nicht auf den ersten Blick erkennen. Doch spätestens bei etwas längeren Scripts, bei denen Sie angesichts vieler Befehle eine Umlenkung der Ausgabe vornehmen müssen/wollen, wird Ihnen eine Menge Tipparbeit mit exec abgenommen. Anstatt hinter jede Befehlszeile das Umlenkungszeichen für die Standard- und Fehlerausgabe zu setzen, können Sie mit einem einfachen exec-Aufruf einen Filedeskriptor während der Scriptausführung komplett in eine andere Richtung umlenken.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-Programmierung


Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
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

Cookie-Einstellungen ändern