GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden des Bash-printf-Befehls zum Drucken formatierter Ausgaben

Der einfachste Weg, in der Linux-Befehlszeile zu drucken, ist die Verwendung des Echo-Befehls.

echo "Value of var is $var"

Der Echo-Befehl ist jedoch nicht ausreichend, wenn Sie eine formatierte Ausgabe drucken müssen.

Hier hilft Ihnen der Befehl printf. Der bash printf-Befehl funktioniert wie der printf-Befehl in der Programmiersprache C/C++.

printf "My brother %s is %d years old.\n" Prakash 21

Können Sie die Ausgabe erraten?

Das erste Argument %s erwartet einen String %d erwartet eine Dezimalzahl, genau wie C/C++. Machen Sie sich keine Sorgen, wenn Sie mit C/C++ nicht vertraut sind.

Sie müssen es nicht nur für die Verwendung des Befehls printf in Ihren Bash-Skripten lernen. Lassen Sie mich Ihnen einige Beispiele für den printf-Befehl von Bash zeigen.

Bash-printf-Befehl verwenden

Beginnen wir zunächst mit der Syntax.

printf format [arguments]

Hier format ist eine Zeichenfolge, die bestimmt, wie die nachfolgenden Werte angezeigt werden.

Im Beispiel printf "My brother %s is %d years old.\n" Prakash 21 , das gesamte "Mein Bruder %s ist %d Jahre alt.\n" ist ein Format, gefolgt von den Argumenten Prakash und 21 . Die Argumente werden zum Ersetzen der Formatbezeichner (%s, %d usw.) verwendet, die ich später in diesem Artikel erklären werde.

In seiner einfachsten Form kann printf als echo-Befehl zum Anzeigen eines Strings verwendet werden.

printf "Hello World\n"

Beachten Sie das Zeilenumbruchzeichen \n Am Ende? Der Unterschied zwischen echo und printf-Befehl ist, dass echo am Ende automatisch ein neues Zeilenzeichen hinzufügt, aber für printf müssen Sie es explizit hinzufügen.

Achten Sie besonders auf Art und Anzahl der Argumente

Denken Sie daran, dass die Formatzeichenfolge versucht, auf alle Argumente angewendet zu werden. Deshalb sollten Sie darauf besonders achten.

[email protected]:~$ printf "Hello, %s! \n" Abhishek Prakash
Hello, Abhishek! 
Hello, Prakash!

Ebenso sollten Sie auch auf die Art des Formatbezeichners achten, den es in der Formatzeichenfolge erwartet.

Wie Sie im obigen Beispiel sehen können, zeigt es die Standardwerte an, die Null für Zeichenfolgen und 0 für Ganzzahlen sind, wenn es keine beabsichtigten Argumente findet.

printf "Hi %s, your room number is %d. \n" Abhishek Prakash 131
bash: printf: Prakash: invalid number
Hi Abhishek, your room number is 0. 
Hi 131, your room number is 0.

Hier braucht es Abhishek Prakash als erster Satz von Argumenten und 131 als zweite Gruppe von Argumenten.

Wenn es eine Zeichenkette (Prakash) anstelle einer ganzen Zahl findet, beschwert es sich, aber es zeigt weiterhin die Ausgabe mit dem zweiten Argument bei seinem Standardwert 0 an.

In ähnlicher Weise sieht es 131 als Zeichenfolge im zweiten Satz von Argumenten und da das zweite Argument fehlt, ist es standardmäßig 0.

Formatspezifikationszeichen

Es stehen Ihnen mehrere Formatbezeichner zur Verfügung, um Ihre Ausgabe im gewünschten Format anzuzeigen. Hier sind einige der häufigsten:

Zeichen Nutzung
%s Zeichenfolge
%c Einzelnes Zeichen
%d Ganzzahlen
%o Oktale Ganzzahlen
%x Hexadezimale Ganzzahlen
%f Fließkomma
%b String mit Backslash-Escape-Zeichen
%% Prozentzeichen

Nachdem Sie nun mit dem Formatbezeichner vertraut sind, sehen wir uns einige weitere Beispiele an, die sie in Aktion zeigen.

Beispiele für Bash-printf-Befehle

Ich glaube nicht, dass Sie für die meisten dieser Beispiele eine detaillierte Erklärung brauchen, da sie selbsterklärend sind.

[email protected]:~$ printf "The octal value of %d is %o\n" 30 30
The octal value of 30 is 36

Sehen wir uns die Verwendung von %b an Bezeichner für die korrekte Interpretation des Backslash-Escape-Zeichens.

[email protected]:~$ printf "String with backslash: %s\n" "Hello\nWorld!"
String with backslash: Hello\nWorld!

Sie sehen für %s , es macht keinen Unterschied. Aber mit %b das Escape-Zeichen für die neue Zeile wird korrekt interpretiert:

[email protected]:~$ printf "String with backslash: %b\n" "Hello\nWorld!"
String with backslash: Hello
World!

Wenn Sie den %c verwenden , liest es jeweils nur Zeichen.

[email protected]:~$ printf "Character: %c\n" a
Character: a
[email protected]:~$ printf "Character: %c\n" a b c
Character: a
Character: b
Character: c
[email protected]:~$ printf "Character: %c\n" abc
Character: a

Verwenden von Modifikatoren, um die printf-Ausgabe in einem bestimmten Stil anzuzeigen

Es gibt Modifikatoren, um das Aussehen der Ausgabe nach Ihren Wünschen zu ändern.

# Modifikator für Oktal- und Hexadezimalzahlen

Sie haben vorhin die Verwendung von %o gesehen zum Umwandeln von Dezimal in Oktal. Es war jedoch nicht ganz klar, dass es sich um eine Oktalzahl handelte. Sie können den # verwenden Modifikator zur Anzeige von Oktal- und Hexadezimalzahlen im richtigen Format.

[email protected]:~$ printf "%d is %#o in octal and %#x in hexadecimal\n" 30 30 30
30 is 036 in octal and 0x1e in hexadecimal

Leerzeichenmodifikator für positive ganze Zahlen

Sie können ein Leerzeichen zwischen % verwenden und d in %d um eine positive ganze Zahl mit einem führenden Leerzeichen anzuzeigen. Dies ist hilfreich, wenn Sie eine Spalte mit positiven und negativen Zahlen haben. Sehen Sie, welche "hübscher" aussieht:

[email protected]:~$ printf "%d \n%d \n%d \n" 10 -10 10
10 
-10 
10 
[email protected]:~$ printf "% d \n%d \n% d \n" 10 -10 10
 10 
-10 
 10 

Breitenmodifikator

Der Breitenmodifikator ist eine Ganzzahl, die die minimale Feldbreite des Arguments angibt.

Standardmäßig ist es rechtsbündig:

[email protected]:~$ printf "%10s| %5d\n" Age 23
       Age|    23

Sie können es linksbündig machen, indem Sie - hinzufügen kennzeichnen:

[email protected]:~$ printf "%-10s| %-5d\n" Age 23
Age       | 23

Präzisionsmodifikator

Sie können den Genauigkeitsmodifikator (.) Punkt verwenden, um eine Mindestanzahl von Ziffern anzugeben, die mit %d angezeigt werden sollen , %u , %o , %x . Es fügt links vom Wert eine Nullauffüllung hinzu.

[email protected]:~$ printf "Roll Number: %.5d\n" 23
Roll Number: 00023

Wenn Sie den Genauigkeitsmodifikator mit einer Zeichenfolge verwenden, gibt er die maximale Länge der Zeichenfolge an. Wenn die Zeichenfolge länger ist, wird sie in der Anzeige abgeschnitten.

[email protected]:~$ printf "Name: %.4s\n" Abhishek
Name: Abhi

Sie können Breiten- und Präzisionsmodifikator kombinieren:

[email protected]:~$ printf "Name: %.4s\n" Abhishek
Name: Abhi
[email protected]:~$ printf "Name: %10.4s\n" Abhishek
Name:       Abhi

Bonusbeispiel:Anzeige der Ausgabe im Tabellenformat mit printf

Lassen Sie uns das, was Sie über den Befehl printf gelernt haben, mit einem etwas komplizierteren Beispiel sinnvoll anwenden. Dies wird das wahre Potenzial des printf-Befehls in Bash-Skripten demonstrieren.

Lassen Sie uns den Befehl printf verwenden, um die folgende Tabelle mit bash zu drucken:

Name ID Alter Noten
Sherlock Holmes 0000122 23 A
James Bond 0000007 27 F
Herkules Poirot 0006811 59 G
Jane Marple 1234567 71 C

Hier ist das Shell-Skript, das ich für diese Aufgabe geschrieben habe. Ihr Skript kann abweichen:

#/bin/bash
seperator=--------------------
seperator=$seperator$seperator
rows="%-15s| %.7d| %3d| %c\n"
TableWidth=37

printf "%-15s| %-7s| %.3s| %s\n" Name ID Age Grades
printf "%.${TableWidth}s\n" "$seperator"
printf "$rows" "Sherlock Holmes" 122 23 A
printf "$rows" "James Bond" 7 27 F
printf "$rows" "Hercules Poirot" 6811 59 G
printf "$rows" "Jane Marple" 1234567 71 C

Wenn ich nun dieses Bash-Shell-Skript ausführe, wird Folgendes ausgegeben:

Ist es nicht wunderbar, den bash-printf-Befehl zu verwenden, um schön formatierte Ausgaben für Ihre Skripte zu drucken?

Ich hoffe, Ihnen hat dieses ausführliche Tutorial zum printf-Befehl in Linux gefallen. Wenn Sie Fragen oder Anregungen haben, lassen Sie es mich bitte wissen. Und vergessen Sie nicht, Mitglied des Linux-Handbuchs zu werden, um weitere solche informativen Linux-Lerninhalte zu erhalten.


Linux
  1. Verwenden einer Referenz auf eine Bash-String-Variable in Sed?

  2. Verwenden des Linux-Sleep-Befehls in Bash-Skripten

  3. Verwenden des Linux-Basisnamenbefehls in Bash-Skripten

  4. Beispiele für die Verwendung des Befehls tcpdump für die Netzwerkfehlerbehebung

  5. Ausgabe des Befehls nach Spalten mit Bash aufteilen?

Tipps zur Verwendung des Top-Befehls unter Linux

Bash-printf-Befehl

Bash-Scripting – Printf-Befehl mit Beispielen erklärt

Verwenden des Linux-Dirname-Befehls in Bash-Skripten

Verwenden Sie grep, um nach einer Zeichenfolge zu suchen, die einen Punkt enthält

Verwenden von random zum Generieren einer zufälligen Zeichenfolge in Bash