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

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

In diesem Artikel werde ich die grundlegende Verwendung von Bash printf erklären Befehl mit Beispielen in Linux. Am Ende dieses Artikels werden Sie mit der Verwendung des printf-Befehls in Bash-Shell-Scripting vertraut sein.

Bash printf-Befehl

Bash bietet zwei Arten von Befehlen, die zum Drucken Ihrer Ausgabe auf dem Terminal verwendet werden können. Einer ist das Echo Befehl, der meistens für diesen Zweck verwendet wird. Der zweite ist printf Befehl.

Printf ähnelt der printf-Funktion in C Sprache, aber mit eigenen Funktionen. Der Hauptunterschied zwischen echo und printf Befehl ist dieser printf bietet Formatierung und zusätzliche Funktionalitäten gegenüber dem echo Befehl.

Wenn Sie das echo nicht verwendet haben befehlen, haben wir einen ausführlichen Artikel darüber, den Sie sich ansehen sollten.

  • Bash-Echo-Befehl mit Beispielen in Linux erklärt

Printf ist eine eingebaute Shell, aber Sie können auch einen externen Befehl für printf finden . Builtin hat Vorrang vor externen Befehlen. Sie können diese Informationen abrufen, indem Sie type Befehl wie unten gezeigt.

$ type -a printf
printf is a shell builtin
printf is /usr/bin/printf
printf is /bin/printf

Weitere Einzelheiten zu type Befehl finden Sie in der folgenden Anleitung:

  • Das Type-Command-Tutorial mit Beispielen für Anfänger

Wenn Sie die externe Version von printf ausführen möchten , müssen Sie auf den vollständigen Verzeichnispfad zeigen, in dem sich die Binärdatei befindet.

$ printf "Hello World\n" # SHELL BUILTIN
$ /usr/bin/printf "Hello World\n" # EXTERNAL VERSION OF PRINTF

Bash printf-Hilfe anzeigen

Wie ich im vorherigen Abschnitt erwähnt habe, printf ist bash eingebaut. Sie müssen die bash öffnen Manpage und navigieren Sie zu printf Abschnitt.

$ man bash
/printf → presss

Sie können auch den folgenden Befehl ausführen, der den Hilfeabschnitt von printf anzeigt aus der bash Manpage.

$ man bash | less --pattern='^ *printf +['

Grundform des printf-Befehls

In den Beispielen werde ich den printf vergleichen mit echo Befehl, die Gemeinsamkeit zu verstehen.

Unten ist das Format für printf Befehl:

printf [-v var] format [arguments]

Argumente sollten an printf übergeben werden Andernfalls schlägt es fehl, wie im folgenden Bild gezeigt.

$ printf
$ echo $?

Übergeben Sie ein Argument und führen Sie printf aus erneut befehlen. Aus dem folgenden Beispiel können Sie sehen, dass ich \n hinzugefügt habe, was das Zeilenumbruchzeichen ist. Standardmäßig printf fügt keine neue Zeile wie echo hinzu Befehl, also müssen Sie \n hinzufügen .

$ printf "Linux is fun to work with" # WITHOUT NEW LINE
$ printf "Linux is fun to work with\n" # WITH NEW LINE

Variablen und Befehlsinterpretation

Innerhalb von printf können Sie beliebige Variablen einschließen oder Befehle ausführen Erklärung. Dieses Verhalten ähnelt dem echo Befehl.

$ VAR1="Linux"
$ printf "$VAR1 is fun to work with\n"

Empfohlene Lektüre:

  • Bash-Scripting – Variablen mit Beispielen erklärt

Verhalten zwischen einfachen und doppelten Anführungszeichen

Wenn Sie Ihre Argumente in einfache Anführungszeichen setzen, werden die Variable und der Befehl als einfacher Text behandelt. Dies ist das gleiche Verhalten in echo Befehl auch. Sie müssen die Argumente in doppelte Anführungszeichen setzen, wenn Sie möchten, dass die Variable und der Befehl erweitert werden.

$ printf '$VAR1 is fun to work with\n'
$ printf 'Today date = $(date)\n'

Wenn Sie Argumente ohne Anführungszeichen übergeben, printf betrachtet nur das erste Wort als Argument und gibt es aus. Verwenden Sie also Anführungszeichen um printf ist erforderlich.

$ printf Today date = $(date)\n

Umleitung und Weiterleitung der Ausgabe

Standardmäßig printf sendet die Ausgaben an stdout (Terminal). Sie können die Ausgabe mit dem Umleitungsoperator in eine Datei umleiten oder kombinieren Sie ihn mit dem Pipe-Operator zur Weiterverarbeitung.

# PRINT TO STDOUT
$ printf "Today date = $(date)\n"
# REDIRECT TO A FILE
$ printf "Today date = $(date)\n" > /tmp/tdy.txt
$ cat /tmp/tdy.txt
# PIPE
$ printf "Today date = $(date)\n" | grep -i -o IST

Verwandte Lektüre:

  • Bash-Umleitung mit Beispielen erklärt

Ausgang einer Variablen zuweisen

Manchmal möchten Sie vielleicht den printf speichern in eine Variable ausgeben und später für eine Verarbeitung verwenden. Normalerweise führen Sie printf aus eingeschlossen in eckige Klammern, die den Befehl ausführen und die Ausgabe einer Variablen zuweisen.

$ ZONE=$(printf "Today date = $(date)\n" | grep -i -o IST)
$ printf $ZONE

Alternativ können Sie auch das -v verwenden Flag zusammen mit printf um die Ausgabe in einer Variablen zu speichern. Sie müssen den Variablennamen nach -v übergeben Flagge.

$ printf -v TIME "Today date = $(date)\n"
$ echo $TIME

Mehrzeilige printf-Anweisung

Wenn mehr als eine Zeile gedruckt werden soll, können Sie den Text in doppelte Anführungszeichen setzen. Wenn Sie eine große Zeile haben, die als einzelne Zeile gedruckt werden soll, und die Zeile zur besseren Lesbarkeit des Codes mehrzeilig schreiben möchten, können Sie am Ende jeder Zeile einen umgekehrten Schrägstrich verwenden, an dem die nächste Zeile als Fortsetzung zur vorherigen Zeile.

$ printf "\n I am running PoP_OS
It is a great OS
With Great features\n"
$ printf "I am running pop_os \
It is a great OS \
With Great features\n"

Backslash-escaped-Zeichen

Sie können die folgenden Backslash-escaped Zeichen in printf verwenden .

  • Zeilenumbruchzeichen (\n)
  • Horizontaler Tabulator (\t) und vertikaler Tabulator (\v)
  • Rücktaste (\b)
  • Wagenrücklauf (\r)

Lassen Sie uns nacheinander mit Beispielen diskutieren.

Zeilenumbruchzeichen (\n)

Wir haben bereits etwas über Zeilenumbrüche gesehen (\n ) in allen vorherigen Abschnitten. Newline-Zeichen (\n ) fügt eine neue Zeile hinzu.

$ printf "Today date = $(date)\n"

Horizontaler Tabulator (\t) und vertikaler Tabulator (\v)

Horizontale und vertikale Tabulatorzeichen werden verwendet, um Tabulatoren zu Ihrem printf hinzuzufügen Argumente.

$ printf "Today date \t $(date)\n" # HORIZONTAL TAB
$ printf "Today date \v $(date)\n" # VERTICAL TAB

Backspace-Zeichen (\b)

Backspace-Zeichen (\b ) entfernt einen Buchstaben. Dies ist wie das Drücken der Rücktaste auf unserer Tastatur.

$ printf "It's a rain\by day..\n"

Wagenrücklauf (\r)

Der Cursor wird beim Carriage Return (\r ) wird genutzt. Was auch immer nach \r kommt ersetzt die Zeichen von der ersten Position.

$ printf "It's a rain\by\r day..\n"

Escape-Backslash-Zeichen (\)

Wenn Sie Sonderzeichen maskieren möchten (\n , \t , \v , \b , \r ) und behandeln Sie es wie eine Zeichenfolge, dann stellen Sie ihm doppelte Backslashes voran (\\ ).

$ printf "It's a rain\\by\\r day..\n"

Was auch immer Sie bisher gesehen haben, Sie finden die gleichen Operationen im echo Befehl auch. Wenn Sie das echo bereits kennen Befehl, bis zu diesem Zeitpunkt hätten Sie sich mit dem printf sehr vertraut gemacht Befehl auch.

Printf-Formatbezeichner

Formatbezeichner sind eine Möglichkeit, Werte in printf zu ersetzen anstatt den Wert in printf fest zu codieren . Es gibt viele Buchstaben, die für die Substitution verwendet werden, und jeder Buchstabe steht für einen bestimmten Datentyp. Wenn Sie einen Bezeichner verwenden, müssen Sie ihm ein % voranstellen Symbol. Sehen wir uns einige der häufig verwendeten Formatbezeichner an.

Stringspezifizierer (%s)

Wenn Sie Zeichenfolgen in printf einfügen möchten , müssen Sie %s verwenden . Schauen Sie sich das folgende Beispiel an. Ich habe ein printf -Anweisung und ich möchte den Wert "United" ersetzen innerhalb des printf . Also %s wird verwendet, was ein String-Bezeichner ist und wenn Sie den Befehl ausführen, der Wert "united" wird anstelle von %s eingesetzt .

$ printf "++ Manchester %s has a strong lineup this season" "United"

Sie können so viele Substitutionsargumente übergeben, wie Sie möchten, und Sie müssen die gleiche Anzahl von Spezifizierern innerhalb des Arguments verwenden.

$ printf "++ %s %s has a strong lineup this %s" "Manchester" "United" "season"

Was, wenn weniger Spezifizierer und mehr Argumente verwendet werden?

Schauen Sie sich das folgende Beispiel an. Ich habe am Anfang nur einen Bezeichner verwendet und drei zu ersetzende Argumente (Strings) übergeben. Der Weg printf Wenn dies behandelt wird, beginnt es mit dem Ersetzen des ersten Arguments im ersten Bezeichner, und das nächste Argument wird erneut an den ersten Bezeichner übergeben, da es keine anderen Bezeichner gibt. Auf diese Weise treten drei Ersetzungen auf, die eigentlich nicht korrekt sind und das gewünschte Ergebnis liefern.

$ printf "++ %s United has a strong lineup this Season\n" "Manchester" "United" "season"

Es gibt einige Anwendungsfälle, in denen dieses Verhalten sinnvoll ist. Schauen Sie sich das folgende Beispiel an. Ich möchte eine Willkommensnachricht für einige Spieler drucken und ihre Namen als Argumente übergeben. Normalerweise können Sie die Namensliste in einem Array speichern und das Array durchlaufen und die Nachricht drucken. Dies ist jedoch ein effektiver Weg, um das Ergebnis zu erzielen, indem die Verwendung von Schleifen vermieden wird.

$ printf "++ Welcome %s to manchester united\n" "Ronaldo" "Varane" "Jadon Sancho\n"
++ Welcome Ronaldo to manchester united
++ Welcome Varane to manchester united
++ Welcome Jadon Sancho to manchester united

Dezimalzahl mit Vorzeichen (%d) und Dezimalzahl ohne Vorzeichen (%u)

Verwenden Sie %d, um ganze Zahlen mit Singen zu ersetzen .

$ printf ">> Welcome %s to manchester united - You get shirt number - %d\n" "Ronaldo" 7 "Varane" 19 "Jadon Sancho" 25

Um Ganzzahlen ohne Vorzeichen zu ersetzen, verwenden Sie %u .

$ printf "UNSIGNED INTEGER = %u\n" 10

Wenn Sie versuchen, einen anderen Datentyp als Integer zu ersetzen, erhalten Sie eine Fehlermeldung.

$ printf ">> Ronaldo gets no %d\n" seven

Gleitkommazahl (%f)

Um Fließkommazahlen zu ersetzen, verwenden Sie %f .

$ printf "Integer 100 to floating-point %f\n" 100

Backslash-Escape-Sequenz interpretieren

Sie können Backslash-Escape-Sequenzen als Argumente übergeben und %b verwenden die die Backslash-Escape-Sequenz interpretiert und erweitert.

$ printf "Welcome to %b Manchester united %b" "\v" "\n"

Printf-Konvertierungsanweisungen

Es gibt optionale Konvertierungsmodifikatoren, die zum Formatieren Ihres printf verwendet werden können Ausgänge.

%[flags][width][.precision]specifier

Breitenmodifikator

Der Breitenmodifikator bestimmt die Mindestanzahl von Zeichen in der Konvertierung. Wenn die Anzahl der Zeichen geringer ist, werden Leerzeichen wie unten gezeigt vorangestellt.

$ printf "%10s\n" "Ronaldo"

Wenn Sie sich das obige Bild ansehen, ist der Spezifizierer (Ronaldo) 7 Zeichen und ich habe die Breite auf 10 festgelegt . In diesem Fall werden Leerzeichen hinzugefügt, um die Breite 10 auszurichten .

Sie können auch Flag-Modifikatoren verwenden, um die Ausrichtung zu rechtfertigen, oder Nullen anstelle von Leerzeichen hinzufügen. Wenn die Ausgabe beispielsweise linksbündig ausgerichtet werden muss, können Sie einen Bindestrich hinzufügen (- ) Flag-Modifizierer.

$ printf "%-10s\n" "Ronaldo"

Bei Integer- und Fließkommawerten können Sie das Leerzeichen durch Nullen ersetzen durch Hinzufügen eines Flag-Modifizierers Null (0).

$ printf "%010d \n" 7

Präzisionsmodifikator

Dies ist ein optionaler Parameter, der verwendet werden kann, um die Anzahl der zu druckenden Zeichenfolgen, Ganzzahlen und Gleitkommapositionen zu bestimmen. Sie müssen Punkt(.) verwenden gefolgt von der Ganzzahl, um die Anzahl der zu druckenden Positionen festzulegen.

Schauen Sie sich das folgende Beispiel an. Ich verwende einen Zeichenfolgenbezeichner und setze den Genauigkeitsmodifikator auf vier.

$ printf "%.7s\n" "Ronaldo has joined Manu"

Sternchen (* ) können anstelle von ganzzahligen Präzisionswerten übergeben werden. Sternchen akzeptieren ein Argument für die Genauigkeit, anstatt den Genauigkeitswert fest zu codieren.

$ printf "%.*s\n" 7 "Ronaldo has joined Manu"

Schlussfolgerung

Wir haben in diesem Artikel eine ganze Reihe von Informationen über den Bash-Befehl printf behandelt. Um den printf zu verwenden Üben Sie einfach alle im Artikel angegebenen Beispiele. Printf ist viel leistungsfähiger in der Formatierung als die Beispiele, die ich in diesem Artikel gezeigt habe. Wenn Sie mit den Grundlagen vertraut sind, können Sie je nach Anwendungsfall printf verwenden effizient.

Verwandte Lektüre:

  • Bash-Skripting – Indiziertes Array mit Beispielen erklärt
  • Bash-Skripting – Assoziatives Array mit Beispielen erklärt
  • Bash-Skripting – While- und Until-Schleife mit Beispielen erklärt
  • Bash-Skripting – For-Schleife mit Beispielen erklärt
  • Bash-Scripting – Funktionen mit Beispielen erklärt
  • Bash Heredoc-Tutorial für Anfänger

Linux
  1. Bash HereDoc Tutorial mit Beispielen

  2. Linux cut Befehl erklärt mit 6 Beispielen

  3. Befehl zum Herunterfahren von Linux mit Beispielen erklärt

  4. Linux Traceroute-Befehl, erklärt mit Beispielen

  5. '&&' vs. '&' mit dem 'test'-Befehl in Bash

Bash-Scripting – Indiziertes Array mit Beispielen erklärt

Tr-Befehl in Linux mit Beispielen erklärt

w Befehl mit Beispielen in Linux erklärt

Bash-Scripting Teil 2 – For- und While-Schleifen mit Beispielen

Linux tee-Befehl erklärt (mit Beispielen)

Linux csplit Befehl erklärt (mit Beispielen)