Bash printf: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 4: Zeile 4:
 
*printf "Dies ist ein einfaches Beispiel\n"
 
*printf "Dies ist ein einfaches Beispiel\n"
 
Der Text kann auch Sonderzeichen (z. B. Zeilenumbrüche) enthalten:
 
Der Text kann auch Sonderzeichen (z. B. Zeilenumbrüche) enthalten:
*printf "Hier werden \n zwei Zeilen ausgegebe\nn!"
+
*printf "Hier werden \n zwei Zeilen ausgegebe.\n"
 
Die Zeichensequenz \n bewirkt einen Sprung an den Anfang der folgenden Bildschirmzeile. Weitere gebräuchliche Sonderzeichen sind:
 
Die Zeichensequenz \n bewirkt einen Sprung an den Anfang der folgenden Bildschirmzeile. Weitere gebräuchliche Sonderzeichen sind:
 
{| class="wikitable"
 
{| class="wikitable"

Aktuelle Version vom 8. Juni 2023, 13:35 Uhr

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.\n"

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

Links