Ausgabe mit Printf
Der Befehl Printf erlaubt weitgehende Anweisungen zum Formatieren der Ausgabe. Sie erzeugen auf diese Weise etwa tabellarische Datenausgaben, deren Spalten korrekt übereinanderstehen. Im Gegensatz zu Echo unterscheidet Printf verschiedene Datentypen. Dabei steht %s für eine Zeichenkette, %c für ein einzelnes Zeichen, %d für eine Ganzzahl und %f für eine Fließkommazahl.
Mit der Option -v Variable weisen Sie das formatierte Ergebnis als Wert direkt einer Variablen zu.
TIPP
Enthält eine Variable eine Zeichenkette mit Leerzeichen, müssen Sie sie beim Einsatz mit dem Operator %s in Anführungszeichen stellen.
Es gibt noch weitere Anweisungen. Für die Ausgabe von Fließkommazahlen benötigen Sie zwei Angaben: die gesamte Länge der Ausgabe, also inklusive dem Komma und den Nachkommastellen sowie die Zahl der Nachkommastellen selbst. Das Minuszeichen sorgt für eine linksbündige Ausgabe. man 3 printf gibt Aufschluss über die Operatoren zum Formatieren.
Im Listing 11 finden Sie die meisten für den Alltag notwendigen Anweisungen (Abbildung 3). So formatiert Zeile 8 den Text so, das der Gesamtplatz 8 Stellen einnimmt und die Zeichenkette 3 Stellen, die rechtsbündig ausgerichtet ist. Das Beispiel der folgenden Zeile ist vom Platz gleich gestaltet, aber linksbündig ausgerichtet.
Listing 11
#! /bin/bash TEXT="Mustertext" NR1=12,345 NR2=-3,4 NR3=-45 printf "Beispiel 1 (Text): %8.3s \n" $TEXT printf "Beispiel 2 (Text): %-8.3s \n" $TEXT printf "Beispiel 3 (Text): %-15s \n" $TEXT printf "Beispiel 4 (Text): %15s \n" $TEXT printf "Beispiel 5 (Zahl 1): %10.2f \n" $NR1 printf "Beispiel 6 (Zahl 2): %10.2f \n" $NR2 printf "Beispiel 7 (Zahl 3): %d \n" $NR3 printf "Beispiel 8 (Zahl 3): %.5d \n" $NR3 printf -v f "%.3s \n" $TEXT echo -e "Beispiel 9: Wert der Variablen \$F: $F" printf "Text: %-.3s Zahl1: %.2f Zahl2: %.2f\n\n" $TEXT $NR1 $NR2
In den Beispielen 1 bis 4 nimmt der Text einen Platz von 8 beziehungsweise 15 Stellen ein, jeweils linksbündig und rechtsbündig formatiert. Die folgenden Zeilen zeigen Beispiele für Fließkommazahlen mit zehnstelliger Breite mit zwei Stellen nach dem Komma sowie dem Pendant mit negativen Werten.
Die Beispiele 7 und 8 zeigen die Ausgabe einer ganzen, negativen Zahl – einmal ohne besondere Formatierungen, einmal mit 5 Stellen Platz. Die vorletzten Zeilen demonstrieren das Zuweisen einer Variablen. In der letzten Zeile sehen Sie die gleichzeitige Ausgabe mehrerer Werte. Dabei ist es wichtig, die Anweisungen und Variablen in der gleichen Reihenfolge zu platzieren.
Pipes und Umleitungen
In der Shell haben Sie die Möglichkeit, die Ausgabe eines Programms mittels einer Pipe (|) direkt an nachfolgende Kommandos zu übergeben. Dabei verknüpfen Sie in der Regel die Standardausgabe (STDOUT) mit der Standardeingabe (STDIN). Die Standardausgabe für Fehler (STDERR) liefert die Angaben zu Problemen.
Diese Eingaben und Ausgaben leiten Sie bei Bedarf nicht nur zwischen Befehlen um, sondern schreiben Sie direkt in Dateien (Tabelle “Umleitungen”). Listing 12 verdeutlicht diese Fälle. Beachten Sie, dass dieses Skript nur mit der Bash als Shell vollständig funktioniert.
Umleitungen
|
Befehl |
Erläuterung |
|---|---|
|
|
Standardausgabe in Datei umleiten. Überschreibt die Datei, falls vorhanden. |
|
|
Standardausgabe an Datei anhängen. Legt Datei an, falls diese nicht existiert. |
|
|
Standardfehlerausgabe in Datei umleiten, Zieldatei überschreiben. |
|
|
Standardfehlerausgabe an Datei anhängen beziehungsweise Datei anlegen. |
|
|
Standard- und Standardfehlerausgabe in Datei umleiten, Zieldatei überschreiben. |
|
|
Standard- und Standardfehlerausgabe in Datei umleiten, Zieldatei überschreiben (Version 2, Bash) |
|
|
Standard- und Standardfehlerausgabe in getrennte Dateien umleiten, Zieldatei überschreiben. |
|
|
Inhalt einer Datei einlesen |
Listing 12
#! /bin/bash # Beispiel 1: Standardausgabe umleiten, # ggf. vorhandene Zieldatei überschreiben echo "Zeile 1" > datei1.txt # Beispiel 2: Standardausgabe umleiten, # Inhalt an ggf. vorhandene Zieldatei anfügen echo "Zeile 2" >> datei1.txt # Ausgabe: cat datei1.txt # Beispiel 3: Standard- und # Standardfehlerausgabe umleiten find liste1.txt >& fehler.log # Ausgabe: cat fehler.log # Beispiel 4: Standard- und Standardfehlerausgabe # in jeweils getrennte Dateien umleiten cat datei*.txt > ergebnis.txt 2> fehlerlog.txt # Ausgabe cat ergebnis.txt echo "------------------------" cat fehlerlog.txt
Ein-/Ausgabekanäle anlegen
Bei Bedarf erweitern Sie die standardmäßig vorhandenen Kanäle 0 (STDIN, Standardeingabe), 1 (STDOUT, Standardausgabe) und 2 (STDERR, Standardfehlerausgabe) um weitere. Dafür stehen die Kanäle 3 bis 9 bereit.







