Bash Programmierung: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
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=

Version vom 24. Mai 2023, 18:39 Uhr

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