Inhalte ausgeben mit dem echo-Befehl
Mit echo
gibt man in der Bash Informationen aus. Der echo
-Befehl ist
eigentlich simpel. Komplizierter wird es mit Umbrüchen, Farben und
Steuerzeichen. An dieser Stelle erkläre ich Dir ausführlich, wie echo
richtig funktioniert.
Um Text im Terminal auszugeben, gibt es drei verschiedene Befehle bzw.
Programme: echo
, printf
und tput
. Das komplexeste Werkzeug ist
tput
.
tput
kannst Du z.B. dazu verwenden, um den Cursor auf dem
Bildschirm zu bewegen oder Informationen über den Status des Terminals
abzurufen bzw. zurückzusetzen. Dahingegen geben echo
und printf
nur
Texte aus. An dieser Stelle setzen wir uns erst einmal nur mit echo
auseinander.
Text und Informationen mit echo ausgeben
Mit echo
kannst Du Text und den Inhalt von Variablen ausgeben. Um
»Hallo Welt« zu schreiben, genügt…
$ echo Hallo Welt
Hallo Welt
Besser – denn es beugt Fehlern vor – ist es, den Text in Anführungszeichen zu setzen.
$ echo "Hallo Welt"
Hallo Welt
Variablen gibst Du einfach aus, indem Du den Namen der Variablen
eingibst. So kannst Du z.B. mit der Variablen PWD
Dein
aktuelles Arbeitsverzeichnis ausgeben:
$ echo $PWD
/Users/moritz/Desktop
Du kannst auch die Ausgabe von Variablen mit Text kombinieren.
$ echo "Du bist in diesem Verzeichnis: $PWD."
Du bist in diesem Verzeichnis: /Users/moritz/Desktop.
Kombinierst Du die Ausgabe von Text und Variablen, ist es sicherer die Variable mit geschweiften Klammern einzuklammern. Das verhindert, dass Zeichen, die direkt hinter der Variable folgen, als Variablennamen interpretiert werden. Warum das wichtig ist, wird klar, wenn Du z.B. die Textfarbe in einer Variable speicherst und dann im Text aufrufst.
Hier ein Beispiel, wie es nicht funktioniert:
$ rot="\033[31m"
$ echo "$rotRoter Text"
text
- Die Variable
$rot
bekommt ein Steuerzeichen für die Farbe rot übergeben. echo
gibt an dieser Stelle aber nicht die Variable$rot
, sondern die Variable$rotRoter
aus.- Das Ergebnis lautet dann,
text
, weil in unserem Beispiel die Variable$rotRoter
nicht existiert.
Damit die Variable $rot
genutzt werden kann, musst Du sie deshalb in
geschweiften Klammern schreiben, so ${rot}
. Um das obige Beispiel
korrekt umzusetzen, musst Du also folgendes ins Terminal eingeben.
$ rot="\033[31m"
$ echo -e "${rot}Roter Text"
Roter Text
Sicherlich ist Dir die zusätzliche Option -e
aufgefallen. Diese Option
schaltet die Verwendung von Steuerzeichen ein.
echo
und die Steuerzeichen
Steuerzeichen sind Zeichen, die nicht direkt auf dem Bildschirm sichtbar sind. Übliche Steuerzeichen sind z.B. ein Tabulatorenschritt, Zeilenumbruch, Alarmton, Textanfang oder Textende. Für diese Zeichen sind im ASCII -Zeichencode Steuerzeichen mit den Codewerten 0 bis 31 reserviert.
Steuerzeichen »versteht« der echo
-Befehl nur, wenn Du die Option -e
nutzt. Während der erste Befehl einfach nur die Zeichen ausgibt,…
$ echo "\a"
\a
…ertönt beim zweiten Befehl ein Alarm-Ton.
$ echo -e "\a"
Standardmäßig beendet der echo
-Befehl die Ausgabe immer mit einem
Zeilenumbruch. Den Zeilenumbruch unterbindest Du auf zwei verschiedene
Weisen. Entweder mit dem Steuerzeichen \c
am Ende der Ausgabe – die
Option -e
muss gesetzt sein, z.B.
so:
$ echo -e "Fang den Satz an \c";echo "und beende diesen in der gleichen Zeile."
Oder Du setzt die Option -n
für die Unterdrückung des
Zeilenumbruches.
$ echo -n "Fang den Satz an ";echo "und beende diesen in der gleichen Zeile."
Welche Steuerzeichen für echo
in der Bash-Shell zur Verfügung stehen,
zeigt Dir die folgende
Tabelle.
Escape-Sequenz | Bedeutung |
---|---|
\a | Alarm-Ton (Beep) |
\b | Backspace; ein Zeichen zurück |
\c | continue; das Newline-Zeichen unterdrücken |
\f | Form Feed; einige Zeilen weiterspringen |
\n | Newline; Zeilenumbruch |
\r | return; zurück zum Anfang der Zeile |
\t | Tabulator (horizontal) |
\v | Tabulator (vertikal); meistens eine Zeile vorwärts |
\\ | das Backslash-Zeichen ausgeben |
\0nnn | ASCII-Zeichen in oktaler Form (nur sh und ksh); z. B. aus \0102 wird B (dezimal 66) |
\nnn | ASCII-Zeichen in oktaler Form (nur Bash); z. B. aus \102 wird wird B (dezimal 66) |
Farben für Schrift und Hintergrund bestimmen mit echo
Um bei der Textausgabe über echo
die Farbe zu ändern, nutzt man auch
Steuerzeichen, die Textattribute wie Farbe, Fettschrift oder
Hintergrundfarbe verändern.
Dazu gibt es verschiedene Möglichkeiten bzw. Zeichenketten. Die hässlichste und sehr schwer lesbare Variante sieht so aus und sämtliche Zeichen müssen von Anführungszeichen umklammert werden:
$ echo -e "\033[31mRoter Text"
Wie zuvor, funktionieren die Steuerzeichen nur, wenn Du die Option -e
nutzt. Die Zeichenkette für Farbe ist immer die gleiche. Zuerst wird Sie
mit \033[
eingeleitet, dann folgt eine Zahl z.B. 33
für Gelb und
abschließend ein m
.
Um alle Attribute wieder zurückzusetzen, nutzt man \033[0m
.
$ echo -e "\033[0m"
Um so z.B. einen Satz in gelber Schrift auszugeben, eine Variable – hier
eine Zufallszahl mit $RANDOM
in blau und dann wieder alles auf Null zu
setzen, sieht der echo
-Befehl dann so aus.
$ echo -e "\033[33mEine Zufallszahl in blau: \033[34m$RANDOM\033[0m"
Du siehst, es wird schnell hässlich und unlesbar. Zum Glück gibt es eine
einfachere Lösung: Zuert speichert man die Sequenzen in einer Variablen,
die man anschließend dann gemeinsam mit dem echo
-Befehl nutzt.
Farben in Variablen schreiben
Zuerst definierst Du in Deinem Bash-Script die Farben als Variablen, z.B. so:
reset='\x1B[0m'
yellow='\x1b[0;33m'
boldyellow='\x1b[1;33m'
white='\x1b[0;37m'
boldwhite='\x1b[1;37m'
grey='\x1b[1;30m'
Anschließend kannst Du die Farben einfach über den Echo-Befehl aufrufen:
$ echo -e "Das ist ${yellow}gelb, ${boldyellow}fettes gelb, ${white}weiß oder ${grey}grau. ${reset}Und nach dem Rest ist der Text wieder normal."
Tabelle mit Codes Texteigenschaften
Steuerzeichen | Beschreibung |
---|---|
\033[0m | alle Attribute zurücksetzen |
\033[1m | Fettschrift |
\033[4m | Unterstreichen |
\033[5m | Blinken |
\033[7m | inverse Darstellung |
Tabelle mit Escape-Codes für Farbe, Hintergrundfarbe
Steuerzeichen | Beschreibung |
---|---|
\x1b[0;30m oder \033[30m | Schriftfarbe schwarz |
\x1b[0;31m oder \033[31m | Schriftfarbe rot |
\x1b[0;32m oder \033[32m | Schriftfarbe grün |
\x1b[0;33m oder \033[33m | oder Schriftfarbe gelb |
\x1b[0;34m oder \033[34m | Schriftfarbe blau |
\x1b[0;35m oder \033[35m | Schriftfarbe magenta |
\x1b[0;36m oder \033[36m | Schriftfarbe türkis |
\x1b[0;37m oder \033[37m | Schriftfarbe weiß |
\x1b[0;38m oder \033[40m | Hintergrund schwarz |
\033[41m | Hintergrund rot |
\033[42m | Hintergrund grün |
\033[43m | Hintergrund gelb |
\033[44m | Hintergrund blau |
\033[45m | Hintergrund magenta |
\033[46m | Hintergrund türkis |
\033[47m | Hintergrund grau |