Shell-Skripte selbst schreiben (Teil 1)

Ausgabe

Mit dem Kommando echo geben Sie Daten an verschiedene Ziele aus: Bildschirm, Dateien (durch Umlenken der Ausgabe) oder in einer sogenannten Pipe an nachfolgende Befehle. Dabei besteht die Möglichkeit, wie in echo "Name: $name" feste Werte und Variablen zu kombinieren. Wollen Sie gleichzeitig den Namen der Variablen und dessen Wert ausgeben, nutzen Sie einen der Befehle aus Listing 8.

Listing 8

 

echo "\$Variable = $Variable"
echo '$Variable =' $Variable

Mit der Option -e interpretiert die Shell Steuerzeichen in der Ausgabe, mit -E unterbinden Sie dieses Verhalten. Die Option -n unterdrückt den Zeilenumbruch nach der Ausgabe. Das benötigen Sie beispielsweise, wenn die verwendete Shell die Anzeige eines Prompts bei read nicht unterstützt. Dann verwenden Sie die folgende Kombination:

echo -n "Eingabe: "; read Variable

Mit Steuerzeichen erweitern Sie die Ausgabe auf Terminal oder einer umgelenkten Ausgabe: Auf diese Weise fügen Sie Tabulatoren oder Zeilenvorschübe ein oder unterdrücken diese. Listing 9 zeigt, wie Sie diese Zeichen einsetzen, in Abbildung 1 sehen Sie das Ergebnis. Die Tabelle "Steuerzeichen" führt die möglichen Steuerzeichen auf und erläutert deren Funktion.

Listing 9

 

#!/bin/bash
echo -e "Tabulator: abc\tdef"
echo -e "Vertikaler Tabulator: abc\vdef"
echo -e "Neue Zeile: abc\ndef"
# Neue Zeile unterdrücken (wie -n)
echo -e "Name eingeben: \c"; read NAME; echo $NAME
Abbildung 2: Jetzt wird es bunt (Listing 10).

Steuerzeichen

Zeichen

Aktion

\\

Backslash ausgeben

\a

Alarm, Piepser am Terminal

\b

Rücktaste

\c

Neue Zeile unterdrücken

\f

Seitenvorschub

\n

Neue Zeile

\r

Wagenrücklauf

\t

Tabulator horizontal

\v

Tabulator vertikal

Es besteht die Möglichkeit, die Ausgabe mit Farbe und diversen Attributen zu versehen, sofern das Terminal das unterstützt. So heben Sie wichtige Meldungen hervor oder gestalten Menüs ansprechender. Das Zusammenstellen der dazu genutzten sogenannten Escape-Sequenzen gestaltet sich dabei etwas kryptisch. Die Tabelle "Farben und Attribute" vermittelt einen Überblick der Möglichkeiten.

Farben und Attribute

Zeichen

0

ohne Effekte

1

fett

4

unterstrichen (abhängig vom Terminal)

5

blinken (abhängig vom Terminal)

7

Vorder/Hintergrund tauschen (invertieren)

22

fett zurücksetzen

24

unterstrichen zurücksetzen

25

blinken zurücksetzen

27

invers zurücksetzen

3T

ANSI-Vordergrund-Farbe setzen

4T

ANSI-Hintergrund-Farbe setzen

Bereiche

3

Vordergrund

4

Hintergrund

Farben

0

Schwarz

1

Rot

2

Grün

3

Braun

4

Blau

5

Magenta

6

Cyan

7

Hellgrau

9

auf Normalfarbe zurücksetzen

Sie leiten die Angaben mit einem ESC-Zeichen ein (\033) gefolgt von [. Nun folgen die gewünschten Effekte und Farben, jeweils getrennt durch ein Semikolon. Der Buchstabe m schließt die Sequenz ab. So sorgt beispielsweise folgender Befehl im Terminal für blaue Schrift:

$ echo -e "\033[0;34m"

Dabei leitet \033 die Sequenz mit dem ESC-Zeichen ein. Die Null vor dem Semikolon zeigt an, dass Sie keine Effekte wünschen. Nach dem Semikolon steht die 3 für den Vordergrund, also die Schriftfarbe, wobei diese blau erscheint (4). Mit reset setzen Sie das Terminal wieder zurück.

Listing 10 erzeugt eine kleine Maske zur Eingabe von Daten: Die Überschrift erscheint dabei unterstrichen, die Feldnamen blau, die Eingaben fett und in Schwarz, anschließend zeigt das Skript diese invers und setzt danach die Einstellungen zurück (Abbildung 2).

Listing 10

 

#!/bin/bash
echo ""
echo -e "\033[4;31mDateneingabe"
echo -e "\033[24;34m"
echo -e "Vorname: \t\033[1;39m\c"; read VN
echo -e "\033[22;m\033[24;34mNachname: \t\033[1;39m\c"; read NN
echo -e "\033[1;7m$VN $NN"
echo -e "\033[0;27m"
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).

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.

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

10/2019
Raspberry Pi 4B

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Sonnige Zeiten

    UV-Strahlung ist für das menschliche Auge unsichtbar, was sie umso gefährlicher macht. Die Höhe der tatsächlichen Belastung verrät Ihnen das Selbstbauprojekt UV-Sensor.

  • Gut verpackt

    Für das Ansteuern kleiner Displays gibt es keine Programme von der Stange. Mit Python und einer Pygame-Bibliothek erstellen Sie trotzdem im Handumdrehen Anwendungen.

  • Macro-Mini-Micro-Bit

    Was dem Raspberry Pi für die Computerwelt gelungen ist, versucht der BBC Micro:bit für Mikrocontroller zu wiederholen. Das für Schüler entwickelte Kit hilft beim Einstieg in die hardwarenahe Programmierung.

  • Vorhang auf

    Mit dem modernen Video-Codec HEVC (H.265) erstellte Filme spielen bisherige RasPi-Modelle oft nur ruckelnd ab. Wir testen, ob der neue Raspberry Pi 4B das besser kann.

  • Überraschung!

    Eine optimierte Architektur und mehr RAM beschleunigen den RasPi 4B deutlich. Wir prüfen, wie gut sich der Neuling als Desktop-Rechner schlägt.

  • Durchgestartet

    Ein Stresstest zeigt, wie sich der neue Raspberry Pi 4 Modell B gegenüber den älteren Modellen abhebt.

  • Vierte Generation

    Eine schnellere CPU, USB 3.0 und Gigabit-Ethernet sind nur die Highlights des Raspberry Pi 4B: Das Board bringt viele weitere Neuerungen mit.

  • Tiefenmesser

    Um die Pumpe in einem Brunnenschacht möglichst genau zu positionieren, brauchen Sie dessen Tiefe. Die ermitteln Sie mithilfe eines präzisen Messgeräts aus einem Luftdrucksensor und einem Mikrocontroller.

  • Faktencheck

    Das via DVB-T2 ausgestrahlte Digital-TV liefert Bilder in HD-Qualität. Der dabei eingesetzte H.265-Standard überfordert allerdings kleine Mini-Rechner wie den Raspberry Pi – oder geht es doch?

  • Zugriff von außen

    React Native erlaubt es, Apps mit wenigen Zeilen Code zu programmieren. Mit einem entsprechenden Server sprechen Sie so den RasPi vom Smartphone aus an.