GNU/Linux >> Znalost Linux >  >> Linux

Bash HereDoc výukový program s příklady

Úvod

Dokument zde (HereDoc ) je část kódu, která funguje jako samostatný soubor. HereDoc je víceřádkový řetězec nebo souborový literál pro odesílání vstupních proudů do jiných příkazů a programů.

HereDocs jsou zvláště užitečné při přesměrování více příkazů najednou, což pomáhá dělat skripty Bash přehlednější a snáze pochopitelné.

Tento článek vás naučí základy používání notace HereDoc a některé typické případy použití.

Předpoklady

  • Přístup k příkazovému řádku/terminálu jako uživatel sudo.
  • Textový editor pro psaní skriptů Bash.
  • Základní příkazy systému Linux. Pro rychlou orientaci si stáhněte náš cheat sheet pro příkazy Linuxu.

Syntaxe Bash HereDoc

Syntaxe pro psaní HereDoc je:

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

Skládá se z následujících prvků:

  • COMMAND je volitelný. Funguje pro jakýkoli příkaz, který přijímá přesměrování.
  • << je operátor přesměrování pro předání HereDoc do COMMAND .
  • - je parametr pro potlačení tabulátoru.
  • DELIMITER v prvním řádku definuje oddělovací token HereDoc. END , EOT a EOF jsou nejběžnější, ale funguje každé víceznakové slovo, které se neobjeví v těle. Vynechejte jednoduché uvozovky na prvním řádku, abyste umožnili rozšíření příkazů a proměnných.
  • Položka DELIMITER v posledním řádku označuje konec HereDoc. Použijte stejné slovo z prvního řádku bez úvodních mezer.

Samotný HereDoc obsahuje libovolný počet řádků s řetězci, proměnnými, příkazy a dalšími vstupy.

Příklady Bash HereDoc

Tato část ukazuje, jak používat notaci HereDoc v různých situacích. Nejčastějším případem použití je příkaz cat.

Víceřádkový řetězec

Otevřete terminál a zadejte následující text stisknutím Enter za každým řádkem:

cat << EOF
Hello
World
EOF

cat příkaz přečte HereDoc a zapíše obsah do terminálu.

Variable Expansion

HereDoc přijímá použití proměnných a čte je.

Chcete-li vidět, jak to funguje, vytvořte v terminálu dvě proměnné:

var1="Hello"
var2="World"

Předejte HereDoc cat příkaz k tisku dvou proměnných spolu s proměnnou prostředí:

cat << END
$var1
$var2
$PWD
END

Všechny proměnné se rozbalí a jejich příslušné hodnoty se vytisknou na terminál.

Rozšíření příkazů

HereDocs přijímají substituci příkazů. Spuštěním následujícího kódu v terminálu řádek po řádku zobrazíte výsledky:

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

Každý příkaz zahrňte do $() vyhodnotit prohlášení a získat výsledky. Vynechává se $() zachází s textem jako s řetězcem.

Ignorovat proměnné a rozšíření příkazů

Přidejte jednoduché nebo dvojité uvozovky k prvnímu oddělovači, abyste ignorovali expanzi proměnných a příkazů v HereDoc.

Například:

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

Přidáním uvozovek do oddělovače bude obsah považován za literál HereDoc.

Napojení a přesměrování

Pomocí potrubí nebo přesměrování přepošlete výsledky příkazu jinému příkazu. Vytvořte například skript Bash a přidejte do kanálu příkazu následující obsah:

#!/bin/bash

cat << EOF | base64 -d
SGVsbG8KV29ybGQK
EOF

Případně použijte zápis přesměrování k dosažení stejného výsledku:

#!/bin/bash

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

Spusťte skript Bash, abyste viděli výsledky.

V obou případech jde o výstup z cat a příkaz HereDoc vede (nebo přesměrovává) na base64 -d příkaz. Výsledkem je, že skript dekóduje zprávu z HereDoc.

Zapsat do souboru

HereDoc umožňuje psaní víceřádkových dokumentů pomocí jednoho příkazu.

Chcete-li vytvořit soubor a uložit obsah HereDoc, použijte následující formát:

cat << EOF > hello_world.txt
Hello
World
EOF

Pokud dokument neexistuje, příkaz jej vytvoří. Zkontrolujte obsah souboru a potvrďte:

cat hello_world.txt

Konzole zobrazuje obsah souboru.

Potlačení karty

Přidejte pomlčku (- ) po přesměrování potlačit úvodní tabulátory. Vytvořte a spusťte například následující skript:

#!/bin/bash

cat <<- EOF
        Hello
        World
EOF

Bez potlačení tabulátoru se zpráva vytiskne do konzoly s odsazením. Přidáním pomlčky se odstraní odsazení tabulátoru a zpráva se zobrazí bez úvodních mezer.

Interní příkazy a smyčky

Při práci s HereDoc uvnitř příkazů a smyček mějte na paměti následující chování:

  • Kód uvnitř příkazů a smyček je odsazená. Chcete-li tisknout zprávy z HereDoc bez odsazení, přidejte za operátor přesměrování pomlčku.
  • Koncový oddělovač nemůže mít před sebou mezery ani odsazení.

Vyzkoušejte následující příklad kódu, abyste viděli, jak použít HereDoc uvnitř příkazu if:

#!/bin/bash

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

Pomlčka zajišťuje, že se odsazení při spuštění programu nezobrazí. Koncový oddělovač není odsazen a přidání mezer způsobí chybu.

Víceřádkové komentáře

HereDoc s příkazem null (: ) vytváří efekt blokových komentářů ve skriptech Bash.

Například:

#!/bin/bash

: << 'END'
This is a comment
END

Použití notace HereDoc jako komentář bloku je netradiční. Obecně platí, že Bash nepodporuje blokové komentáře.

Escape Characters

Chcete-li se vyhnout interpretaci znaků, přidejte zpětné lomítko (\ ) před znakem:

cat << EOF
\$100
EOF

Alternativně se zcela vyhněte interpretaci znaků escapováním oddělovače:

cat << \EOF
$100
EOF

Použití uvozovek na oddělovač je v tomto případě ekvivalentní.

Funkce

Přidejte parametry do funkce předáním informací prostřednictvím HereDoc. Vytvořte například funkci pro čtení řádků a přidávání informací prostřednictvím HereDoc:

#!/bin/bash

readLines(){
        read greeting
        read name
}

readLines << EOF
Hello
$USER
EOF

echo $greeting
echo $name

Funkce ukládá informace poskytnuté HereDoc do proměnných.

Spusťte skript pro tisk hodnot proměnných do terminálu.

HereDoc a SSH

HereDoc je vhodný pro provádění více příkazů na vzdáleném počítači. Chcete-li spustit více příkazů, předejte HereDoc připojení SSH.

Například:

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

Příkaz vytiskne místní a vzdálené uživatele do konzole.

HereDoc a SFTP

SFTP pomáhá bezpečně přenášet data prostřednictvím protokolu SSH. Přepošlete HereDoc pro automatické spuštění více příkazů SFTP:

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

Kód nahraje ukázkový soubor na vzdálený počítač.


Linux
  1. vim výukový program s příklady příkazů

  2. Výukový program příkazů cURL s příklady

  3. '&&' vs. '&' s příkazem 'test' v Bash

  1. Příkaz Nohup s příklady

  2. Bash Shell Exit Status Tutorial s praktickými příklady

  3. Výukový program Ultimate Bash Array s 15 příklady

  1. Výukový program příkazu Linux Ping s příklady

  2. Bash wait Příkaz s příklady

  3. wc Linux Command s příklady