{"id":6073,"date":"2021-12-04T14:19:14","date_gmt":"2021-12-04T13:19:14","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=6073"},"modified":"2024-06-02T10:38:04","modified_gmt":"2024-06-02T08:38:04","slug":"bash-inhalte-darstellen-echo-tput-printf","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/bash-inhalte-darstellen-echo-tput-printf\/","title":{"rendered":"Bash Inhalte darstellen &#8211; Echo, Tput, Printf"},"content":{"rendered":"<p>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\u00f6glichkeit den Cursor auf dem Bildschirm zu bewegen oder Informationen \u00fcber den Status des Terminals abzurufen bzw. zur\u00fcckzusetzen.<\/p>\n<h2 id=\"text-und-informationen-mit-echo-ausgeben\">Text und Informationen mit Echo ausgeben<\/h2>\n<p>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 (&#8221; oder&#8217; ) zusammengefa\u00dft werden.<\/p>\n<pre class=\"lang:default decode:true\">echo \"Hallo Welt\"\r\necho \"$pwd\"\r\necho \"Das ist der Inhalt der Variablen pwd : $pwd\"<\/pre>\n<p>Der erste Befehl gibt reinen Text, der Zweite den Inhalt der Variable pwd und der Dritte Text und den Variableninhalt aus.<\/p>\n<p>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.<\/p>\n<pre class=\"lang:default decode:true\">$ rot=\"\\033[31m\"\r\n$ echo \"$rotRoter Text\"\r\n<\/pre>\n<ol>\n<li>Die Variable $rot bekommt ein Steuerzeichen f\u00fcr die Farbe Rot \u00fcbergeben.<\/li>\n<li>echo gibt an dieser Stelle aber nicht die Variable\u00a0 $rot, sondern die Variable $rotRoter aus.<\/li>\n<li>Das Ergebnis lautet dann, &#8220;text&#8221;, da die Variable $rotRoter nicht existiert.<\/li>\n<\/ol>\n<p>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:<\/p>\n<pre class=\"lang:default decode:true\">$ rot=\"\\033[31m\"\r\n$ echo -e \"${rot}Roter Text\"\r\n<\/pre>\n<p>Die zus\u00e4tzliche Option -e schaltet die Verwendung von Steuerzeichen ein.<\/p>\n<h2 id=\"echo-und-die-steuerzeichen\">Echo und die Steuerzeichen<\/h2>\n<p>Steuerzeichen sind Zeichen, die nicht direkt auf dem Bildschirm sichtbar sind. \u00dcbliche Steuerzeichen sind z.B. ein Tabulator, Zeilenumbruch, Alarmton, Textanfang oder Textende. F\u00fcr diese Zeichen sind im <a href=\"https:\/\/de.wikipedia.org\/wiki\/American_Standard_Code_for_Information_Interchange\" target=\"_blank\" rel=\"noopener\">ASCII<\/a> -Zeichencode Steuerzeichen mit den Codewerten 0 bis 31 reserviert. Echo verarbeitet Steuerzeichen nur, wenn die Option -e gesetzt wurde.<\/p>\n<pre class=\"lang:default decode:true \">$ echo \"\\a\"\r\n\\a<\/pre>\n<p>\u2026 ert\u00f6nt beim zweiten Befehl ein Alarmton.<\/p>\n<pre class=\"lang:default decode:true \">$ echo -e \"\\a\"<\/pre>\n<p>Standardm\u00e4\u00dfig 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:<\/p>\n<pre class=\"lang:default decode:true \">$ echo -e \"Fang den Satz an \\c\";echo \"und beende diesen in der gleichen Zeile.\"<\/pre>\n<p>Oder direkt beim Aufruf des echo Befehls mit der Option -n:<\/p>\n<pre class=\"lang:default decode:true \">$ echo -n \"Fang den Satz an \";echo \"und beende diesen in der gleichen Zeile.\"<\/pre>\n<p>Die folgende Tabelle zeigt die Steuerbefehle des echo Befehls in der Bash-Shell<\/p>\n<table>\n<thead>\n<tr>\n<th>Escape-Sequenz<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\\a<\/td>\n<td>Alarmton (Beep)<\/td>\n<\/tr>\n<tr>\n<td>\\b<\/td>\n<td>Backspace; ein Zeichen zur\u00fcck<\/td>\n<\/tr>\n<tr>\n<td>\\c<\/td>\n<td>continue; das Newline-Zeichen unterdr\u00fccken<\/td>\n<\/tr>\n<tr>\n<td>\\f<\/td>\n<td>Form Feed; einige Zeilen weiterspringen<\/td>\n<\/tr>\n<tr>\n<td>\\n<\/td>\n<td>Newline; Zeilenumbruch<\/td>\n<\/tr>\n<tr>\n<td>\\r<\/td>\n<td>return; zur\u00fcck zum Anfang der Zeile<\/td>\n<\/tr>\n<tr>\n<td>\\t<\/td>\n<td>Tabulator (horizontal)<\/td>\n<\/tr>\n<tr>\n<td>\\v<\/td>\n<td>Tabulator (vertikal); meistens eine Zeile vorw\u00e4rts<\/td>\n<\/tr>\n<tr>\n<td>\\\\<\/td>\n<td>das Backslash-Zeichen ausgeben<\/td>\n<\/tr>\n<tr>\n<td>\\0nnn<\/td>\n<td>ASCII-Zeichen in oktaler Form (nur sh und ksh); z. B. aus \\0102 wird B (dezimal 66)<\/td>\n<\/tr>\n<tr>\n<td>\\nnn<\/td>\n<td>ASCII-Zeichen in oktaler Form (nur Bash); z. B. aus \\102 wird wird B (dezimal 66)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"farben-f\u00fcr-schrift-und-hintergrund-bestimmen-mit-echo\">Farben f\u00fcr Schrift und Hintergrund bestimmen mit Echo<\/h2>\n<p>Um bei der Textausgabe mit echo die Farbe zu \u00e4ndern, werden Steuerzeichen genutzt, die Textattribute wie Farbe, Fettschrift oder Hintergrundfarbe ver\u00e4ndern.<\/p>\n<p>Dazu gibt es verschiedene M\u00f6glichkeiten bzw. Zeichenketten. Die sehr schwer lesbare Variante sieht so aus und s\u00e4mtliche Zeichen m\u00fcssen von Anf\u00fchrungszeichen umklammert werden:<\/p>\n<pre class=\"lang:default decode:true \">$ echo -e \"\\033[31mRoter Text\"<\/pre>\n<p>Wie zuvor, funktionieren die Steuerzeichen nur, wenn die Option <code>-e<\/code> gesetzt wurde. Die Zeichenkette f\u00fcr Farbe ist immer die gleiche. Zuerst wird Sie mit <code>\\033[<\/code> eingeleitet, dann folgt eine Zahl z.B. <code>33<\/code> f\u00fcr Gelb und abschlie\u00dfend ein <code>m<\/code>.<\/p>\n<p>Um alle Attribute wieder zur\u00fcckzusetzen, nutzt man <code>\\033[0m<\/code>.<\/p>\n<pre class=\"lang:default decode:true \">$ echo -e \"\\033[0m\"<\/pre>\n<p>Um so z.B. einen Satz in gelber Schrift auszugeben, eine Variable \u2013 hier eine Zufallszahl mit <code>$RANDOM<\/code> in Blau und dann wieder alles auf Null zu setzen, sieht der echo Befehl dann so aus.<\/p>\n<pre class=\"lang:default decode:true \">$ echo -e \"\\033[33mEine Zufallszahl in blau: \\033[34m$RANDOM\\033[0m\"<\/pre>\n<p>Diese Art der Farbausgabe erfolgt dann f\u00fcr jegliche echo Syntax und wird schnell un\u00fcbersichtlich. Daher empfiehlt es sich die Farbcodes in Variablen zu schreiben und diese dann mit dem Echo Befehl auszurufen:<\/p>\n<pre class=\"lang:default decode:true\">reset='\\x1B[0m'\r\nyellow='\\x1b[0;33m'\r\nboldyellow='\\x1b[1;33m'\r\nwhite='\\x1b[0;37m'\r\nboldwhite='\\x1b[1;37m'\r\ngrey='\\x1b[1;30m'\r\n<\/pre>\n<p>Der Aufruf der Farbcodes erfolgt dann \u00fcber die Variable :<\/p>\n<pre class=\"lang:default decode:true \">$ echo -e \"Das ist ${yellow}gelb, ${boldyellow}fettes gelb, ${white}wei\u00df oder ${grey}grau. ${reset}Und nach dem Rest ist der Text wieder normal.\"\r\n<\/pre>\n<h3><\/h3>\n<h3><span style=\"text-decoration: underline;\">Tabelle mit Codes Texteigenschaften<\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th>Steuerzeichen<\/th>\n<th>Beschreibung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\\033[0m<\/td>\n<td>alle Attribute zur\u00fccksetzen<\/td>\n<\/tr>\n<tr>\n<td>\\033[1m<\/td>\n<td>Fettschrift<\/td>\n<\/tr>\n<tr>\n<td>\\033[4m<\/td>\n<td>Unterstreichen<\/td>\n<\/tr>\n<tr>\n<td>\\033[5m<\/td>\n<td>Blinken<\/td>\n<\/tr>\n<tr>\n<td>\\033[7m<\/td>\n<td>inverse Darstellung<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><span style=\"text-decoration: underline;\">Tabelle mit Escape-Codes f\u00fcr Farbe, Hintergrundfarbe<\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th>Steuerzeichen<\/th>\n<th>Beschreibung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\\x1b[0;30m oder \\033[30m<\/td>\n<td>Schriftfarbe schwarz<\/td>\n<\/tr>\n<tr>\n<td>\\x1b[0;31m oder \\033[31m<\/td>\n<td>Schriftfarbe rot<\/td>\n<\/tr>\n<tr>\n<td>\\x1b[0;32m oder \\033[32m<\/td>\n<td>Schriftfarbe gr\u00fcn<\/td>\n<\/tr>\n<tr>\n<td>\\x1b[0;33m oder \\033[33m<\/td>\n<td>oder Schriftfarbe gelb<\/td>\n<\/tr>\n<tr>\n<td>\\x1b[0;34m oder \\033[34m<\/td>\n<td>Schriftfarbe blau<\/td>\n<\/tr>\n<tr>\n<td>\\x1b[0;35m oder \\033[35m<\/td>\n<td>Schriftfarbe magenta<\/td>\n<\/tr>\n<tr>\n<td>\\x1b[0;36m oder \\033[36m<\/td>\n<td>Schriftfarbe t\u00fcrkis<\/td>\n<\/tr>\n<tr>\n<td>\\x1b[0;37m oder \\033[37m<\/td>\n<td>Schriftfarbe wei\u00df<\/td>\n<\/tr>\n<tr>\n<td>\\x1b[0;38m oder \\033[40m<\/td>\n<td>Hintergrund schwarz<\/td>\n<\/tr>\n<tr>\n<td>\\033[41m<\/td>\n<td>Hintergrund rot<\/td>\n<\/tr>\n<tr>\n<td>\\033[42m<\/td>\n<td>Hintergrund gr\u00fcn<\/td>\n<\/tr>\n<tr>\n<td>\\033[43m<\/td>\n<td>Hintergrund gelb<\/td>\n<\/tr>\n<tr>\n<td>\\033[44m<\/td>\n<td>Hintergrund blau<\/td>\n<\/tr>\n<tr>\n<td>\\033[45m<\/td>\n<td>Hintergrund magenta<\/td>\n<\/tr>\n<tr>\n<td>\\033[46m<\/td>\n<td>Hintergrund t\u00fcrkis<\/td>\n<\/tr>\n<tr>\n<td>\\033[47m<\/td>\n<td>Hintergrund grau<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/><span style=\"font-size: 10pt;\">by Speefak<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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\u00f6glichkeit den Cursor auf dem Bildschirm zu bewegen oder Informationen \u00fcber den Status des Terminals abzurufen bzw. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,24,54],"tags":[],"class_list":["post-6073","post","type-post","status-publish","format-standard","hentry","category-bash","category-it-syntax","category-shell-programme"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/bash\/\" rel=\"category tag\">Bash<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/it-syntax\/\" rel=\"category tag\">IT Syntax<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/shell-programme\/\" rel=\"category tag\">Shell<\/a>","rttpg_excerpt":"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\u00f6glichkeit den Cursor auf dem Bildschirm zu bewegen oder Informationen \u00fcber den Status des Terminals abzurufen bzw.&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/6073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=6073"}],"version-history":[{"count":0,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/6073\/revisions"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=6073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=6073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=6073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}