Aus Raspberry Pi Geek 04/2017

Shell-Skripte selbst schreiben (Teil 1) (Seite 4)

Abbildung 2: Jetzt wird es bunt (Listing 10).

Abbildung 2: Jetzt wird es bunt (Listing 10).

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
Abbildung 3: Gebräuchliche Formatierungen mit Printf (Listing 11).

Abbildung 3: Gebräuchliche Formatierungen mit Printf (Listing 11).

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

Befehl > Datei

Standardausgabe in Datei umleiten. Überschreibt die Datei, falls vorhanden.

Befehl >> Datei

Standardausgabe an Datei anhängen. Legt Datei an, falls diese nicht existiert.

Befehl 2> Datei

Standardfehlerausgabe in Datei umleiten, Zieldatei überschreiben.

Befehl 2>> Datei

Standardfehlerausgabe an Datei anhängen beziehungsweise Datei anlegen.

Befehl >& Datei

Standard- und Standardfehlerausgabe in Datei umleiten, Zieldatei überschreiben.

Befehl > Datei 2>&1

Standard- und Standardfehlerausgabe in Datei umleiten, Zieldatei überschreiben (Version 2, Bash)

Befehl > Datei 2> Logfile

Standard- und Standardfehlerausgabe in getrennte Dateien umleiten, Zieldatei überschreiben.

Befehl < Datei

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.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 8 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben