Shell-Skripte selbst schreiben (Teil 1)

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.

In der Praxis leiten Sie so komfortabel Daten in verschiedene Dateien oder Geräte um. Tabelle "File-Deskriptoren" zeigt die Regeln für die zusätzlichen Kanäle. Bei Kanälen zum Lesen und Schreiben gilt es, beide Schritte zum Aufheben vorzunehmen.

File-Deskriptoren

Anweisung

Aktion

exec Ziffer>Ziel

Ausgabekanal anlegen

exec Ziffer<Quelle

Eingabekanal anlegen

exec Ziffer<>Datei

Ein/Ausgabekanal anlegen

Befehl >&Nr

Ausgabe auf Kanal Nr

exec Ziffer>&-

Ausgabekanal aufheben

exec Ziffer<&-

Eingabekanal aufheben

Hier hängen Sie Ausgaben ebenfalls an bestehende Dateien an, indem Sie das Zeichen > doppelt verwenden. Nicht mehr benötigte Deskriptoren sollten Sie unbedingt wieder aufheben. Ein selbsterklärendes Anwendungsbeispiel finden Sie in Listing 13.

Listing 13

 

#! /bin/bash
# Testdateien erzeugen
echo -e "erste\nzweite\ndritte\n" > eingabe.txt
echo -e "eins\nzwei\ndrei\n" > puffer.txt
echo "Das ist lesbar"
# Anlegen Ausgabekanal 3:
exec 3>zieldatei2.txt
# Anlegen Eingabekanal 4:
exec 4<eingabe.txt
# Anlegen Ein-/Ausgabekanal 5:
exec 5<>puffer.txt
# Setzen Umleitung stdout und stderr
exec >zieldatei1.txt 2>fehlerlog
echo "Das kommt in die Datei"
# Ausgabe über Kanal 3
echo "Das kommt in die andere Datei" >&3
echo "Die einzelne Anweisung zur Umleitung ist nicht nötig!"
# Erzeugen einer Fehlermeldung
ls neuedatei.txt
# Auslesen aus Kanal 4 und schreiben auf Kanal 3:
read A <&4
echo $A >&3
# Benutzung der Datei puffer.txt
tail -1 <&5
echo "Neue Zeile" >&5
# Schließen zusätzlicher Kanäle:
exec 3>&-
exec 4<&-
exec 5<&-
exec 5>&-

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 8 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

08/2019
Smarte Hacks

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Immer der Reihe nach

    Mit einer einfachen Schaltung testen Sie Bausteine, die über den SPI-Bus miteinander kommunizieren.

  • Einzigartig

    Eine MAC-Adresse ermöglicht die Kommunikation im Netzwerk. Der 24AA02E48 liefert sie für Setups, die aus grundlegenden Komponenten bestehen.

  • Steinkuchen

    Der Raspberry Pi hat viele Fans, doch nicht ohne Grund sehnen sich viele Anwender nach einem RasPi 4. Der Rock Pi 4 übertrumpft den RasPi 3 in Sachen Leistung um Längen und schlägt sich auch in der Praxis gut.

  • Kerngeschäft

    Der Einstieg in die Welt der Mikrocontroller fällt nicht ganz leicht. Mit dem Nucleo F401RE haben Sie jedoch ein Entwicklerboard samt abgestimmter Entwicklungsumgebung an der Hand.

  • Himbeer-Geräte

    Mit Maus und Tastatur im weiß-roten Raspberry-Look macht die Raspberry Pi Foundation das eigene Angebot an Peripheriegeräten für den Mini-Rechner komplett.

  • Unter Kontrolle

    PiCockpit ist eine speziell auf den RasPi zugeschnittene Online-Monitoring-Lösung. Wir werfen einen ersten Blick auf den brandneuen und in Ausbau befindlichen kostenlosen Dienst.

  • Ins rechte Licht gesetzt

    Selbst ohne eigenen Garten holen Sie sich Pflanzen mithilfe von LEDs in jeden Raum und sehen ihnen mit dem RasPi beim Wachsen zu.

  • Helligkeit nach Maß

    Wer bei wechselnden Lichtverhältnissen nicht ständig die Beleuchtung manuell nachregeln möchte, der spannt dafür einen PiXtend ein.

  • Geschrumpft

    Kleine Bildschirme gibt es zwar viele, aber der Support von Raspbian ist überraschend schlecht. Mit ein paar Tricks erzielen Sie trotzdem ein optimales Ergebnis.

  • Brüllwürfel

    Kompakt-Stereoanlagen mit CD-Spieler und Kassettendeck sind inzwischen oft ein Fall für den Recyclinghof – oder für die digitale Wiederbelebung mit einem RasPi und etwas Geschick.