Moin,
vor einiger Zeit hatte ich mir mal ein Perl-Skript geschrieben, um im Terminal eine Farbtafel anzuzeigen. Jetzt wollte ich das mal in bash ausprobieren, hier das Ergebnis.
Die Farben habe ich in zwei Loops definiert, einmal als Array (erste Variante in Zeile 4), und einmal als 256 einzelne durchnummerierte Variablen (zweite Variante in Zeile 5). Im Verlauf des Skripts benutze ich zur Farbdarstellung beide Varianten. Um die Farbcodes auszugeben, kann man z. B. printf "${fg190}", aber auch printf "${fg[190]}" (wie stellt man hier denn bloss eckige Klammern dar !?) sagen. In der Schleife werden die einzelnen durchnummerierten Hintergrundfarben mit der Array-Variante angesprochen, da eine Angabe wie printf "${fg{$i}}" zu einem Fehler "Falsche Substitution" führt. Die in den weiteren Loops verwendeten Schriftfarben (hier nur Schwarz und Weiss) lassen sich in der Variablen-Variante ansprechen.
Die vielen einzelnen Schleifen waren notwendig, weil manche Ausgaben in schwarzer und andere in weisser Schrift ausgegeben werden müssen, und es sind ja auch passende Zeilenumbrüche nötig.
Natürlich könnte ich auch konsequent nur die Array-Variante verwenden, aber in anderen Skripten, die einfach nur irgendwelchen farbigen Text ausgeben wollen wie die Ausgabe der Überschrift in Zeile 7, ist die Variablen-Variante schöner zu schreiben und zu lesen, weil man die eckigen Klammern nicht braucht.
$RES setzt alle Attribute zurück, und $CLS leert den Bildschirm.
Nicht so schön gelöst, funktioniert aber. Vielleicht hat ja jemand eine bessere Idee. Und vielleicht hat ja jemand Verwendung dafür.
Viele freundliche Grüsse, juribel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #!/bin/bash RES="\e[0m"; CLS=`clear`; for i in {0..255}; do bg[$i]="\e[48;5;${i}m"; fg[$i]="\e[38;5;${i}m"; done for i in {0..255}; do eval "bg$i=\"\e[48;5;${i}m\"; fg$i=\"\e[38;5;${i}m\""; done printf "$CLS\n${fg226}${bg19} Kleine Fingerübung mit 8 Bit ANSI-Farben $RES\n\n" for i in {0..7}; do printf "${bg[$i]}${fg15}%4s ${RES}" $i; done; echo; for i in {8..8}; do printf "${bg[$i]}${fg15}%4s ${RES}" $i; done; for i in {9..15}; do printf "${bg[$i]}${fg0}%4s ${RES}" $i; done; echo; for i in {16..21}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {22..27}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {28..33}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {34..39}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {40..45}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {46..51}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {52..57}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {58..63}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {64..69}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {70..75}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {76..81}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {82..87}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {88..93}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {94..99}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {100..105}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {106..111}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {112..117}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {118..123}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {124..129}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {130..135}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {136..141}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {142..147}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {148..153}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {154..159}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {160..165}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {166..171}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {172..177}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {178..183}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {184..189}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {190..195}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {196..201}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {202..207}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {208..213}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {214..219}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {220..225}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {226..231}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {232..237}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {238..243}; do printf "${bg[$i]}${fg15}%5s ${RES}" $i; done; echo; for i in {244..249}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; for i in {250..255}; do printf "${bg[$i]}${fg0}%5s ${RES}" $i; done; echo; |