Bash printf
Formatierte Ausgabe mit printf
Im einfachsten Fall wird ein fester Text auf dem Bildschirm ausgegeben:
- printf "Dies ist ein einfaches Beispiel\n"
Der Text kann auch Sonderzeichen (z. B. Zeilenumbrüche) enthalten:
- printf "Hier werden \n zwei Zeilen ausgegebe\nn!"
Die Zeichensequenz \n bewirkt einen Sprung an den Anfang der folgenden Bildschirmzeile. Weitere gebräuchliche Sonderzeichen sind:
| \n | Sprung an den Anfang der folgenden Bildschirmzeile |
| \b | Gehe ein Zeichen zurück |
| \a | Akustisches Signal |
| \r | Sprung an den Anfang der aktuellen Bildschirmzeile |
| \\ | Ausgabe des Gegenschrägstrichs "\" (Backslash) |
| %% | Ausgabe des Prozent-Zeichens "%" |
| \" | Ausgabe eines doppelten Anführungszeichens |
| \t | Sprung zur nächsten Tabulatorposition |
Sollen aktuelle Variablenwerte ausgegeben werden, werden in den Aufruf der
Funktion printf entsprechende „Platzhalter“ eingefügt:
- int x = 10;
- printf("Der Wert %d wurde der Variablen x zugewiesen.", x);
Auf dem Bildschirm erfolgt die Ausgabe „Der Wert 10 wurde der Variablen x zugewiesen“, es wird also der Platzhalter %d durch den aktuellen Wert der Variablen x ersetzt. Es ist möglich, mehrere Variablen zugleich auszugeben:
- int x = 123, y = 234;
- printf("x = %d und y = %d", x, y);
Die Ausgabe lautet in diesem Fall „x = 123 und y = 234“. Für jede Variable ist ein eigener Platzhalter (hier: %d) notwendig. Die auszugebenden Variablen werden durch Kommas getrennt aufgelistet. Für jeden Platzhalter muss dabei eine Variable angegeben werden (hier: x, y). Es ist zu beachten, dass der Platzhalter zum Typ der auszugebenden Variablen passt (z. B. dient %d zur Ausgabe einer Variablen des Typs int, short oder long). Weitere Platzhalter sind:
| %d, %i | int, short, long | Ganze Zahl |
| %x, %X | int, short, long | Ganze Zahl, Ausgabe als Hexadezimalzahl |
| %f | float, double | Fließkommazahl |
| %e, %E | float, double | Fließkommazahl, Ausgabe im Exponentialformat |
| %c | char | Einzelnes Zeichen (Buchstabe, Ziffer, …) |
| %s | char* | Zeichenkette („String“) |
- Beispiel
- int i = 10; double d = 22.22; char c = 'X';
- char* str = "abcdefg...";
- printf("Beispiel zu printf:\n");
- printf("%d, %f, %c\n", i, d, c);
- printf("%s", str);
Es kann die Breite des Ausgabebereichs angegeben werden. So wird mit %10d eine ganze Zahl rechtsbündig in einem Bereich von 10 Zeichen Länge ausgegeben: int i = 123;
- printf("->%d<-\n", i);
- printf("->%4d<-\n", i);
- printf("->%5d<-\n", i);
Bei der Ausgabe von Fließkommazahlen kann zusätzlich zur Länge des Ausgabebereichs die Anzahl der Nachkommastellen eingestellt werden:
- float f = 123.625;
- printf("->%f<-\n", f);
- printf("->%.2f<-\n", f);
- printf("->%10.0f<-\n", f);
- printf("->%10.1f<-\n", f);
- printf("->%10.2f<-\n", f);
- printf("->%10.3f<-\n", f);
- printf("->%10.4f<-\n", f)
Beispielskript
#!/bin/bash
for DIR in $(df -t ext4 | awk 'NR>1 { print $6 }'); do
PROZENT=$(df -t ext4 $DIR | awk 'NR>1 { print $5 }')
PRO=$(echo $PROZENT | tr -d "%")
let KI=PRO*20/100
let MI=20-KI
K="####################"
M='--------------------'
printf "%-10s%-4s%.${KI}s%.${MI}s" $DIR $PROZENT $K $M
echo
done