|
|
| Zeile 30: |
Zeile 30: |
| *[[Bash getopts]] | | *[[Bash getopts]] |
|
| |
|
| =printf=
| | *[[Bash printf]] |
| Formatierte Ausgabe mit printf
| |
| | |
| Im einfachsten Fall wird ein fester Text auf dem Bildschirm ausgegeben:
| |
| *printf("Dies ist ein einfaches Beispiel");
| |
| Der Text kann auch Sonderzeichen (z. B. Zeilenumbrüche) enthalten:
| |
| *printf("Hier werden \n zwei Zeilen ausgegeben!");
| |
| Die Zeichensequenz \n bewirkt einen Sprung an den Anfang der folgenden Bildschirmzeile. Weitere gebräuchliche Sonderzeichen sind:
| |
| {| class="wikitable"
| |
| |-
| |
| |\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:
| |
| | |
| {| class="wikitable"
| |
| |-
| |
| |%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==
| |
| <syntaxhighlight>
| |
| #!/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
| |
| </syntaxhighlight>
| |
| ==Links==
| |
| *https://linuxconfig.org/bash-printf-syntax-basics-with-examples | |
|
| |
|
| =Das neue Test Kommando= | | =Das neue Test Kommando= |
Bash Basics
Das neue Test Kommando
- "[[" ist Bashs Verbesserung des "[" Befehls.
- Es ist die bessere Wahl, wenn Sie Skripte schreiben, die auf Bash abzielen. Meine Favoriten sind:
- Es ist eine syntaktische Funktion der Shell, daher weist sie ein besonderes Verhalten auf, das "[" nicht hat.
- Variablen müssen nicht mehr quotiert werden, da leere Zeichenfolgen und Zeichenfolgen mit Leerzeichen intuitiver behandelt werden.
- Zum Beispiel müssen Sie mit "[" schreiben.
if [ -f "$ FILE"]
- um leere Zeichenfolgen oder Dateinamen mit Leerzeichen richtig zu behandeln. Mit "[[" sind die Anführungszeichen unnötig:
if [[ -f $ FILE ]]
- Da es sich um eine syntaktische Funktion handelt, können Sie && und || verwenden Operatoren für Boolesche Tests und <und> für Zeichenfolgenvergleiche.
- [ kann dies nicht tun, da es sich um einen regulären Befehl handelt und &&, ||, <und> nicht als Befehlszeilenargumente an reguläre Befehle übergeben werden.
- Es hat einen wunderbaren Operator = ~, um Übereinstimmungen mit regulären Ausdrücken zu erstellen. Mit [ könntest du schreiben
if ["$ ANSWER" = y -o "$ ANSWER" = yes]
- Mit [[ können Sie dies als schreiben
if [[ $ ANSWER = ~ ^ y (es)? ]]
- Sie können sogar auf die erfassten Gruppen zugreifen, die in BASH_REMATCH gespeichert sind.
- Zum Beispiel wäre $ {BASH_REMATCH [1]} "es", wenn Sie oben ein vollständiges "ja" eingeben.
- Sie erhalten die Mustererkennung aka Globbing kostenlos.
- Vielleicht sind Sie weniger streng im Schreiben von Ja. Vielleicht bist du okay, wenn der Benutzer y-irgendetwas eingibt. Haben Sie sich versichert:
- wenn $ ANSWER = y *
Links