Někdy potřebujete generovat víceřádkové dokumenty se složitými vnořenými strukturami, jako je YAML nebo HTML, ze skriptů Bash. Můžete toho dosáhnout pomocí některých speciálních funkcí Bash, jako jsou zde dokumenty . „Zde dokument“ je kód nebo textový blok, který lze přesměrovat na skript nebo interaktivní program. Skript Bash se v podstatě stává dokumentem zde, když přesměrovává na jiný příkaz, skript nebo interaktivní program.
Tento článek vysvětluje, jak:
- Používejte pole, slovníky a čítače
- Práce s různými typy komentářů
- Generujte dokumenty YAML a HTML
- Posílejte e-maily s textem a přílohami
[ Stáhnout nyní:Průvodce systémového administrátora skriptováním Bash. ]
Dokumentace skriptu
Je důležité komentovat své skripty a můžete vytvářet jednořádkové komentáře s #
, nebo můžete mít víceřádkové komentáře pomocí kombinace :
a <
Například:
# Toto je jednoduchý komentář:<
Tato funkce nápovědy pro váš skript je dalším užitečným příkladem:
#!/bin/bashSCRIPT=$(/usr/bin/basename $0)|| exit 100export funkce SCRIPT help_me { /usr/bin/cat<
Víceřádkový formát je sám o sobě docela užitečný, zvláště při dokumentování složitých skriptů. Existuje však pěkný obrat k používání zde uvedených dokumentů, který jste již možná viděli:
$ /usr/bin/cat<$HOME/test_doc.txtZde je víceřádkový dokument, který chci uložit. Všimněte si, jak mohu uvnitř použít proměnné jako HOME=$HOME.EOF
Zde je to, co je napsáno v souboru:
$ /usr/bin/cat $HOME/test_doc.txtZde je víceřádkový dokument, který chci uložit. Všimněte si, jak mohu uvnitř použít proměnné jako HOME=/home/josevnz.
Nyní přejdu k něčemu jinému, abyste mohli tyto znalosti uplatnit.
[ Chcete-li získat další tipy pro Bash, stáhněte si tento Cheat Shell Scripting Cheat Sheet ]
Použití polí a slovníků ke generování souboru YAML inventáře Ansible
Řekněme, že máte následující soubor CSV se seznamem hostitelů na každém řádku obsahujícím servery nebo počítače:
# Seznam hostitelů, označeno groupmacmini2:serversraspberrypi:serversdmaf5:desktopsmac-pro-1-1:desktops
Chcete převést seznam na následující soubor inventáře Ansible YAML:
--- Všechny:Děti:Servery:Hostitelé:MacMini2:RaspberryPi:VARS:Popis:Linux Servery pro rodinné stolní počítače Nunez:Hostitelé:DMAF5:Mac-Pro-1-1:VARS:Popis:Desktopy pro rodinu Nunezových
Další omezení:
- Každý typ systému (počítače nebo servery) bude mít jinou proměnnou s názvem
description
. Pomocí polí a asociativních polí a čítačů můžete tento požadavek splnit. - Pokud uživatel nezadá všechny správné značky, měl by skript selhat. Neúplný inventář není přijatelný. K tomuto požadavku pomůže jednoduché počítadlo.
Tento skript splňuje cíl:
#!/bin/bash:<
Takto vypadá výstup:
Všechny:Děti:Servery:Hostitelé:MacMini2:RaspberryPi:VARS:Popis:Linux Servery pro rodinné stolní počítače Nunez:Hostitelé:DMAF5:Mac-Pro-1-1:VARS:Popis:Desktopy pro Nunez rodina
Lepším způsobem by mohlo být vytvořit dynamický inventář a nechat jej používat v knize Ansible. Aby byl příklad jednoduchý, neudělal jsem to zde.
Odesílání e-mailů HTML s přílohami YAML
Poslední příklad vám ukáže, jak přenést zde dokument do Mozilla Thunderbird (něco podobného můžete udělat pomocí /usr/bin/mailx
) pro vytvoření zprávy s HTML dokumentem a přílohami:
#!/bin/bash:<Dobrý den,
toto je veřejné oznámení od $USER:
Datum Čas Verze jádra $ DATE $TIME Rovelli $KERNEL_VERSION
EMAIL
Potom můžete zavolat skript pošty:
$ ./html_mail.sh [email protected] hosts.yaml
Pokud věci půjdou podle očekávání, Thunderbird vytvoří e-mail jako tento:
Koneckonců
Abychom to shrnuli, naučili jste se, jak:
- K generování dokumentů používejte sofistikovanější datové struktury, jako jsou pole a asociativní pole
- Používejte počítadla ke sledování událostí
- Používejte zde dokumenty k vytváření dokumentů YAML, pokynů nápovědy, HTML atd.
- Posílejte e-maily pomocí HTML a YAML
Bash je vhodný pro generování malých, nekomplikovaných dokumentů. Pokud pracujete s velkými nebo složitými dokumenty, může být lepší použít jiný skriptovací jazyk, jako je Python nebo Perl, abyste dosáhli stejných výsledků s menší námahou. Nikdy také nepodceňujte důležitost skutečného debuggeru při vytváření složitých dokumentů.