Um Text im Terminal auszugeben, gibt es drei verschiedene Befehle bzw. Programme: echo, printf und tput. Echo und printf geben nur Text aus, mit printf kann die Ausgabe nach einem definierten Muster vorgeben werden. Mit tput besteht die Möglichkeit den Cursor auf dem Bildschirm zu bewegen oder Informationen über den Status des Terminals abzurufen bzw. zurückzusetzen.
Text und Informationen mit Echo ausgeben
Die einfachste Ausgabe mit echo besteht aus dem echo Befehl selbst und dem darauf folgenden Text oder dem Inhalt einer Variable. Ausgaben sollten zur Fehlervermeidung mit Quotes (“ oder‘ ) zusammengefaßt werden.
1 2 3 |
echo "Hallo Welt" echo "$pwd" echo "Das ist der Inhalt der Variablen pwd : $pwd" |
Der erste Befehl gibt reinen Text, der Zweite den Inhalt der Variable pwd und der Dritte Text und den Variableninhalt aus.
Wird die Ausgabe von Text und Variablen kombiniert, 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 z.B. die Textfarbe in einer Variable gespeichert und dann im Text aufgerufen wird.
1 2 |
$ rot="\033[31m" $ echo "$rotRoter 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“, da die Variable $rotRoter nicht existiert.
Damit die Variable $rot genutzt werden kann, muss diese deshalb in geschweiften Klammern geschrieben werden. Somit ergibt sich nach obigem Beispiel die korrekt lautende Syntax wie folgt:
1 2 |
$ rot="\033[31m" $ echo -e "${rot}Roter Text" |
Die zusätzliche Option -e 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 Tabulator, Zeilenumbruch, Alarmton, Textanfang oder Textende. Für diese Zeichen sind im ASCII -Zeichencode Steuerzeichen mit den Codewerten 0 bis 31 reserviert. Echo verarbeitet Steuerzeichen nur, wenn die Option -e gesetzt wurde.
1 2 |
$ echo "\a" \a |
… ertönt beim zweiten Befehl ein Alarmton.
1 |
$ echo -e "\a" |
Standardmäßig beendet der echo Befehl die Ausgabe immer mit einem Zeilenumbruch. Der Zeilenumbruch kann auf 2 Arten unterbunden werden. Entweder mit dem Steuerzeichen \c am Ende der Ausgabe bei gesetzter -e Option:
1 |
$ echo -e "Fang den Satz an \c";echo "und beende diesen in der gleichen Zeile." |
Oder direkt beim Aufruf des echo Befehls mit der Option -n:
1 |
$ echo -n "Fang den Satz an ";echo "und beende diesen in der gleichen Zeile." |
Die folgende Tabelle zeigt die Steuerbefehle des echo Befehls in der Bash-Shell
Escape-Sequenz | Bedeutung |
---|---|
\a | Alarmton (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 mit echo die Farbe zu ändern, werden Steuerzeichen genutzt, die Textattribute wie Farbe, Fettschrift oder Hintergrundfarbe verändern.
Dazu gibt es verschiedene Möglichkeiten bzw. Zeichenketten. Die sehr schwer lesbare Variante sieht so aus und sämtliche Zeichen müssen von Anführungszeichen umklammert werden:
1 |
$ echo -e "\033[31mRoter Text" |
Wie zuvor, funktionieren die Steuerzeichen nur, wenn die Option -e
gesetzt wurde. 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
.
1 |
$ 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.
1 |
$ echo -e "\033[33mEine Zufallszahl in blau: \033[34m$RANDOM\033[0m" |
Diese Art der Farbausgabe erfolgt dann für jegliche echo Syntax und wird schnell unübersichtlich. Daher empfiehlt es sich die Farbcodes in Variablen zu schreiben und diese dann mit dem Echo Befehl auszurufen:
1 2 3 4 5 6 |
reset='\x1B[0m' yellow='\x1b[0;33m' boldyellow='\x1b[1;33m' white='\x1b[0;37m' boldwhite='\x1b[1;37m' grey='\x1b[1;30m' |
Der Aufruf der Farbcodes erfolgt dann über die Variable :
1 |
$ 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 |
by Speefak