GNU/Linux >> Linux Esercitazione >  >> Linux

Bash HereDoc Tutorial con esempi

Introduzione

Un documento qui (HereDoc ) è una sezione di codice che funge da file separato. Un HereDoc è una stringa multilinea o un file letterale per inviare flussi di input ad altri comandi e programmi.

Gli HereDocs sono particolarmente utili quando si reindirizzano più comandi contemporaneamente, il che aiuta a rendere gli script Bash più ordinati e facili da capire.

Questo articolo ti insegna le basi dell'uso della notazione HereDoc e alcuni casi d'uso tipici.

Prerequisiti

  • Accesso alla riga di comando/terminale come utente sudo.
  • Un editor di testo per scrivere script Bash.
  • Comandi di base di Linux. Per un rapido riferimento, prendi il nostro cheat sheet dei comandi Linux.

Sintassi Bash HereDoc

La sintassi per scrivere un HereDoc è:

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

Si compone dei seguenti elementi:

  • COMMAND è facoltativo. Funziona con qualsiasi comando che accetta il reindirizzamento.
  • << è l'operatore di reindirizzamento per inoltrare un HereDoc al COMMAND .
  • - è un parametro per la soppressione delle tabulazioni.
  • DELIMITER nella prima riga definisce un token delimitatore HereDoc. END , EOT e EOF sono i più comuni, ma qualsiasi parola composta da più caratteri che non apparirà nel corpo funziona. Ometti le virgolette singole sulla prima riga per consentire l'espansione dei comandi e delle variabili.
  • Il DELIMITER nell'ultima riga indica la fine di un HereDoc. Usa la stessa parola della prima riga senza gli spazi bianchi iniziali.

Lo stesso HereDoc contiene un numero qualsiasi di righe con stringhe, variabili, comandi e altri input.

Esempi Bash HereDoc

Questa sezione mostra come usare la notazione HereDoc in varie situazioni. Il caso d'uso più comune è con il comando cat.

Stringa multilinea

Apri il terminale e inserisci il seguente testo, premendo Invio dopo ogni riga:

cat << EOF
Hello
World
EOF

Il cat Il comando legge HereDoc e scrive il contenuto nel terminale.

Espansione variabile

Un HereDoc accetta l'uso di variabili e le legge.

Per vedere come funziona, crea due variabili nel terminale:

var1="Hello"
var2="World"

Passa l'HereDoc a un cat comando per stampare le due variabili insieme a una variabile di ambiente:

cat << END
$var1
$var2
$PWD
END

Tutte le variabili si espandono e i rispettivi valori vengono stampati sul terminale.

Espansione dei comandi

HereDocs accetta la sostituzione dei comandi. Esegui il codice seguente nel terminale riga per riga per vedere i risultati:

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

Racchiudi ogni comando in $() per valutare una dichiarazione e recuperare i risultati. Omissione di $() tratta il testo come una stringa.

Ignora variabile e espansione comandi

Aggiungi virgolette singole o doppie al primo delimitatore per ignorare l'espansione di variabili e comandi in un HereDoc.

Ad esempio:

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

L'aggiunta di virgolette al delimitatore considera il contenuto come un letterale HereDoc.

Piping e reindirizzamento

Utilizzare il piping o il reindirizzamento per inoltrare i risultati del comando a un altro comando. Ad esempio, crea uno script Bash e aggiungi i seguenti contenuti per reindirizzare un comando:

#!/bin/bash

cat << EOF | base64 -d
SGVsbG8KV29ybGQK
EOF

In alternativa, usa la notazione di reindirizzamento per ottenere lo stesso risultato:

#!/bin/bash

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

Esegui lo script Bash per vedere i risultati.

In entrambi i casi, l'output del cat e un comando HereDoc invia (o reindirizza) a base64 -d comando. Di conseguenza, lo script decodifica il messaggio da HereDoc.

Scrivi su file

HereDoc consente di scrivere documenti su più righe tramite un comando.

Per creare un file e salvare il contenuto di HereDoc, utilizzare il seguente formato:

cat << EOF > hello_world.txt
Hello
World
EOF

Se il documento non esiste, il comando lo crea. Controlla il contenuto del file per confermare:

cat hello_world.txt

La console mostra il contenuto del file.

Soppressione schede

Aggiungi un trattino (- ) dopo il reindirizzamento per eliminare le schede iniziali. Ad esempio, crea ed esegui il seguente script:

#!/bin/bash

cat <<- EOF
        Hello
        World
EOF

Senza la soppressione delle tabulazioni, il messaggio viene stampato sulla console con indentazione. L'aggiunta del trattino rimuove il rientro di tabulazione e restituisce il messaggio senza gli spazi iniziali.

Dichiarazioni interne e loop

Quando lavori con un HereDoc all'interno di istruzioni e cicli, tieni presente il seguente comportamento:

  • Codice all'interno di istruzioni e cicli è rientrato. Aggiungi un trattino dopo l'operatore di reindirizzamento per stampare i messaggi da un HereDoc senza indentazione.
  • Il delimitatore finale non può avere spazi o rientri prima di esso.

Prova il seguente codice di esempio per vedere come utilizzare un HereDoc all'interno di un'istruzione if:

#!/bin/bash

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

Il trattino assicura che i rientri non vengano visualizzati durante l'esecuzione del programma. Il delimitatore finale non è rientrato e l'aggiunta di spazi provoca un errore.

Commenti su più righe

Un HereDoc con il comando null (: ) crea l'effetto dei commenti di blocco negli script Bash.

Ad esempio:

#!/bin/bash

: << 'END'
This is a comment
END

L'uso della notazione HereDoc come commento di blocco non è convenzionale. In generale, Bash non supporta i commenti a blocchi.

Caratteri di escape

Per evitare l'interpretazione dei caratteri, aggiungi una barra rovesciata (\ ) prima di un carattere:

cat << EOF
\$100
EOF

In alternativa, evita completamente l'interpretazione dei caratteri eseguendo l'escape del delimitatore:

cat << \EOF
$100
EOF

L'uso delle virgolette sul delimitatore è equivalente in questo caso.

Funzioni

Aggiungi parametri a una funzione inoltrando informazioni tramite un HereDoc. Ad esempio, crea una funzione per leggere le righe e aggiungere informazioni tramite HereDoc:

#!/bin/bash

readLines(){
        read greeting
        read name
}

readLines << EOF
Hello
$USER
EOF

echo $greeting
echo $name

La funzione memorizza le informazioni fornite da HereDoc in variabili.

Esegui lo script per stampare i valori delle variabili sul terminale.

HereDoc e SSH

Un HereDoc è conveniente per eseguire più comandi su una macchina remota. Passa un HereDoc alla connessione SSH per eseguire più comandi.

Ad esempio:

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

Il comando stampa gli utenti locali e remoti sulla console.

HereDoc e SFTP

SFTP aiuta a trasferire i dati in modo sicuro tramite il protocollo SSH. Inoltra un HereDoc per eseguire automaticamente più comandi SFTP:

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

Il codice carica un file di esempio sulla macchina remota.


Linux
  1. Comando Nohup con esempi

  2. Tutorial vim con esempi di comandi

  3. Esercitazione sullo stato di uscita di Bash Shell con esempi pratici

  4. Il tutorial Ultimate Bash Array con 15 esempi

  5. '&&' vs. '&' con il comando 'test' in Bash

Linux tr Command Tutorial per principianti (con esempi)

15 Comando Linux ps con esempi

Il tutorial del comando fc con esempi per principianti

Comando Bash Echo spiegato con esempi in Linux

Scripting Bash – Spiegazione del comando Printf con esempi

Tutorial comando trova Linux (con esempi)