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

Bash HereDoc Tutorial mit Beispielen

Einführung

Ein Here-Dokument (HereDoc ) ist ein Codeabschnitt, der als separate Datei fungiert. Ein HereDoc ist ein mehrzeiliger String oder ein Dateiliteral zum Senden von Eingabeströmen an andere Befehle und Programme.

HereDocs sind besonders nützlich, wenn mehrere Befehle gleichzeitig umgeleitet werden, wodurch Bash-Skripte übersichtlicher und leichter verständlich werden.

In diesem Artikel lernen Sie die Grundlagen der Verwendung der HereDoc-Notation und einige typische Anwendungsfälle kennen.

Voraussetzungen

  • Zugriff auf die Befehlszeile/das Terminal als sudo-Benutzer.
  • Ein Texteditor zum Schreiben von Bash-Skripten.
  • Grundlegende Linux-Befehle. Für eine schnelle Referenz holen Sie sich unseren Spickzettel für Linux-Befehle.

Bash HereDoc-Syntax

Die Syntax zum Schreiben eines HereDocs lautet:

[COMMAND] <<[-] 'DELIMITER'
  Line 1
  Line 2
  ...
DELIMITER

Es besteht aus den folgenden Elementen:

  • COMMAND es ist optional. Funktioniert für jeden Befehl, der eine Umleitung akzeptiert.
  • << ist der Umleitungsoperator zum Weiterleiten eines HereDocs an COMMAND .
  • - ist ein Parameter für die Tabulatorunterdrückung.
  • DELIMITER in der ersten Zeile definiert ein HereDoc-Trennzeichen. END , EOT und EOF sind am häufigsten, aber jedes Wort mit mehreren Zeichen, das nicht im Hauptteil erscheint, funktioniert. Lassen Sie einfache Anführungszeichen in der ersten Zeile weg, um die Erweiterung von Befehlen und Variablen zu ermöglichen.
  • Das DELIMITER in der letzten Zeile zeigt das Ende eines HereDoc an. Verwenden Sie dasselbe Wort aus der ersten Zeile ohne die führenden Leerzeichen.

Das HereDoc selbst enthält beliebig viele Zeilen mit Strings, Variablen, Befehlen und anderen Eingaben.

Bash HereDoc-Beispiele

Dieser Abschnitt zeigt, wie Sie die HereDoc-Notation in verschiedenen Situationen verwenden. Der häufigste Anwendungsfall ist der cat-Befehl.

Mehrzeiliger String

Öffnen Sie das Terminal und geben Sie den folgenden Text ein, indem Sie Enter drücken nach jeder Zeile:

cat << EOF
Hello
World
EOF

Die cat Der Befehl liest das HereDoc und schreibt den Inhalt in das Terminal.

Variablenerweiterung

Ein HereDoc akzeptiert die Verwendung von Variablen und liest sie.

Um zu sehen, wie das funktioniert, erstellen Sie zwei Variablen im Terminal:

var1="Hello"
var2="World"

Geben Sie das HereDoc an eine cat weiter Befehl zum Drucken der beiden Variablen zusammen mit einer Umgebungsvariablen:

cat << END
$var1
$var2
$PWD
END

Alle Variablen werden erweitert, und ihre jeweiligen Werte werden auf dem Terminal ausgegeben.

Befehlserweiterung

HereDocs akzeptiert die Befehlsersetzung. Führen Sie den folgenden Code Zeile für Zeile im Terminal aus, um die Ergebnisse anzuzeigen:

cat << EOF
$(echo Hello)
$(whoami)
EOF

Schließen Sie jeden Befehl in $() ein um eine Anweisung auszuwerten und die Ergebnisse abzurufen. Weglassen von $() behandelt den Text als String.

Variablen- und Befehlserweiterung ignorieren

Fügen Sie dem ersten Trennzeichen einfache oder doppelte Anführungszeichen hinzu, um die Erweiterung von Variablen und Befehlen in einem HereDoc zu ignorieren.

Zum Beispiel:

cat << "EOF"
$(echo Hello)
$(whoami)
$PWD
EOF

Durch Hinzufügen von Anführungszeichen zum Trennzeichen wird der Inhalt als HereDoc-Literal behandelt.

Piping und Weiterleitung

Verwenden Sie Piping oder Redirecting, um die Befehlsergebnisse an einen anderen Befehl weiterzuleiten. Erstellen Sie beispielsweise ein Bash-Skript und fügen Sie den folgenden Inhalt hinzu, um einen Befehl weiterzuleiten:

#!/bin/bash

cat << EOF | base64 -d
SGVsbG8KV29ybGQK
EOF

Verwenden Sie alternativ die Umleitungsnotation, um dasselbe Ergebnis zu erzielen:

#!/bin/bash

(base64 -d) < cat << EOF
SGVsbG8KV29ybGQK
EOF

Führen Sie das Bash-Skript aus, um die Ergebnisse anzuzeigen.

In beiden Fällen ist die Ausgabe von cat und ein HereDoc-Befehl leitet (oder leitet) an base64 -d weiter Befehl. Als Ergebnis entschlüsselt das Skript die Nachricht aus dem HereDoc.

In Datei schreiben

HereDoc ermöglicht das Schreiben mehrzeiliger Dokumente über einen Befehl.

Um eine Datei zu erstellen und den HereDoc-Inhalt zu speichern, verwenden Sie das folgende Format:

cat << EOF > hello_world.txt
Hello
World
EOF

Wenn das Dokument nicht existiert, erstellt der Befehl es. Prüfen Sie zur Bestätigung den Inhalt der Datei:

cat hello_world.txt

Die Konsole zeigt den Inhalt der Datei.

Tab-Unterdrückung

Fügen Sie einen Bindestrich hinzu (- ) nach der Umleitung, um führende Tabulatoren zu unterdrücken. Erstellen Sie beispielsweise das folgende Skript und führen Sie es aus:

#!/bin/bash

cat <<- EOF
        Hello
        World
EOF

Ohne Tabulatorunterdrückung wird die Meldung mit Einrückung auf der Konsole ausgegeben. Das Hinzufügen des Bindestrichs entfernt den Tabulatoreinzug und gibt die Nachricht ohne die führenden Leerzeichen aus.

Innere Anweisungen und Schleifen

Beachten Sie bei der Arbeit mit einem HereDoc innerhalb von Anweisungen und Schleifen das folgende Verhalten:

  • In Anweisungen und Schleifen codieren eingerückt ist. Fügen Sie nach dem Umleitungsoperator einen Bindestrich hinzu, um Nachrichten aus einem HereDoc ohne Einrückung auszugeben.
  • Das Endtrennzeichen darf keine Leerzeichen oder Einrückungen davor haben.

Probieren Sie den folgenden Beispielcode aus, um zu sehen, wie Sie ein HereDoc innerhalb einer if-Anweisung verwenden:

#!/bin/bash

if true;
then
        cat <<- "END"
        Hello
        World
END
fi

Der Bindestrich stellt sicher, dass die Einzüge nicht angezeigt werden, wenn das Programm ausgeführt wird. Das Endtrennzeichen ist nicht eingerückt und das Hinzufügen von Leerzeichen verursacht einen Fehler.

Mehrzeilige Kommentare

Ein HereDoc mit dem Null-Befehl (: ) erzeugt den Effekt von Blockkommentaren in Bash-Skripten.

Zum Beispiel:

#!/bin/bash

: << 'END'
This is a comment
END

Die Verwendung der HereDoc-Notation als Blockkommentar ist unkonventionell. Im Allgemeinen unterstützt Bash keine Blockkommentare.

Escapezeichen

Um eine Zeicheninterpretation zu vermeiden, fügen Sie einen umgekehrten Schrägstrich hinzu (\ ) vor einem Zeichen:

cat << EOF
\$100
EOF

Alternativ können Sie die Zeicheninterpretation vollständig vermeiden, indem Sie das Trennzeichen maskieren:

cat << \EOF
$100
EOF

Die Verwendung von Anführungszeichen am Trennzeichen ist in diesem Fall äquivalent.

Funktionen

Fügen Sie einer Funktion Parameter hinzu, indem Sie Informationen über ein HereDoc weiterleiten. Erstellen Sie beispielsweise eine Funktion zum Lesen von Zeilen und zum Hinzufügen von Informationen über HereDoc:

#!/bin/bash

readLines(){
        read greeting
        read name
}

readLines << EOF
Hello
$USER
EOF

echo $greeting
echo $name

Die Funktion speichert die vom HereDoc bereitgestellten Informationen in Variablen.

Führen Sie das Skript aus, um die Variablenwerte auf dem Terminal auszugeben.

HereDoc und SSH

Ein HereDoc ist praktisch, um mehrere Befehle auf einem Remote-Computer auszuführen. Übergeben Sie ein HereDoc an die SSH-Verbindung, um mehrere Befehle auszuführen.

Zum Beispiel:

ssh [email protected] << EOF
echo "Local user: $USER"
echo "Remote user: \$USER"
EOF

Der Befehl gibt die lokalen und entfernten Benutzer auf der Konsole aus.

HereDoc und SFTP

SFTP hilft bei der sicheren Datenübertragung über das SSH-Protokoll. Leiten Sie ein HereDoc weiter, um mehrere SFTP-Befehle automatisch auszuführen:

sftp [email protected] << EOF
put test.sh
EOF

Der Code lädt eine Beispieldatei auf den Remote-Computer hoch.


Linux
  1. Nohup-Befehl mit Beispielen

  2. vim Tutorial mit Befehlsbeispielen

  3. Bash Shell Exit Status Tutorial mit praktischen Beispielen

  4. Das ultimative Bash-Array-Tutorial mit 15 Beispielen

  5. cURL-Befehls-Tutorial mit Beispielen

Linux tr Command Tutorial für Anfänger (mit Beispielen)

15 Linux-PS-Befehl mit Beispielen

Das fc Command Tutorial mit Beispielen für Anfänger

Bash Echo-Befehl mit Beispielen in Linux erklärt

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

Tutorial für Linux-Suchbefehle (mit Beispielen)