- Naučte sa štruktúru, syntax a kľúčové príkazy na vytváranie robustných a prenosných Bash skriptov.
- Ovládajte premenné, polia, podmienené funkcie, cykly, funkcie, I/O a cron na automatizáciu úloh v reálnom svete.
- Používajte osvedčené postupy ladenia a interné premenné a externé nástroje ako ShellCheck.
- Integrujte Bash frameworky a kolekcie nástrojov a pridajte do svojich skriptov grafické rozhranie, súbežnosť a pokročilé funkcie.
Ak pracujete s Linuxom denne – či už spravujete servery , experimentujete s kontajnermi alebo vyvíjate aplikácie – zvládnutie skriptovania v jazyku bash je pravdepodobne zručnosť, ktorá vám ušetrí najviac času. S niekoľkými textovými súbormi a trochou predstavivosti môžete automatizovať všetko od záloh až po zložité nasadenia, ako aj rutinné úlohy, ktoré v súčasnosti vykonávate manuálne bez toho, aby ste si to uvedomovali.
V tejto príručke sa dôkladne a detailne pozrieme na to, ako pomocou bash skriptov a kolekcií nástrojov premeniť vaše skripty z jednoduchých, základných príkazov na skutočne profesionálne nástroje. Začneme so základmi shellu, preberieme si dôležité príkazy, riadiace štruktúry, funkcie, polia, ladenie, cron a ďalšie. Preskúmame tiež niektoré repozitáre funkcií a grafické rozhrania Bash, ktoré posunú vaše skripty na vyššiu úroveň.
Čo je Bash a prečo je taký užitočný pre automatizáciu?

Bash (Bourne Again Shell) je najrozšírenejší interpret príkazov na unixových systémoch: prevažná väčšina linuxových distribúcií ho obsahuje ako svoj predvolený shell a možno ho nájsť aj v systémoch macOS a Windows prostredníctvom terminálov typu Bash od WSL alebo Git. Je to interaktívne rozhranie aj skriptovací jazyk.
Keď otvoríte terminál, Bash zobrazí výzvu , do ktorej môžete zadávať príkazy. Každý príkaz zvyčajne nasleduje štruktúru argumenty príkazu . Všetko, čo viete robiť „ručne“ v termináli, je možné vložiť do textového súboru a spustiť hromadne.
Bash skript je jednoducho textový súbor obsahujúci zoznam príkazov, ktoré shell vykonáva jeden po druhom. V tom je to kúzlo: namiesto písania 10 príkazov každý deň ich uložíte, dáte im oprávnenia na vykonávanie a spustíte ich v jednom kroku. Okrem toho môžete pridať premenné, podmienky, slučky a funkcie na prijímanie rozhodnutí, opakovanie úloh a zapuzdrenie logiky.
Bash sa tiež riadi klasickou filozofiou Unixu: veľa malých nástrojov, ktoré robia jednu vec veľmi dobre a sú kombinované s pipes . Pomocou jediného skriptu môžete reťaziť find, grep, sed, awk, tar, gzip , ssh, scp a akýkoľvek iný systémový nástroj a vytvoriť tak veľmi výkonné procesy správy a údržby.
Základné koncepty shellu a skriptovania v jazyku Bash
Pre úplné pochopenie skriptovania v jazyku Bash je potrebné rozlišovať medzi dvoma pojmami: shell a samotné skriptovanie . Shell je program, ktorý interpretuje príkazy, a skriptovanie je proces zoskupovania týchto príkazov do spustiteľného súboru.
Typický skript vždy začína špeciálnym riadkom s názvom shebang . Tento prvý riadok informuje systém o tom, ktorý interpret má použiť na spustenie súboru. Zvyčajne uvidíte niečo takéto:
#!/bin/bash
Môžete tiež použiť `#!/usr/bin/env bash` , aby systém hľadal Bash v ceste PATH. To poskytuje väčšiu flexibilitu, ak cesta k spustiteľnému súboru nie je presne `/bin/bash`, čo sa niekedy stáva v exotickejších prostrediach.
Skripty sa vo všeobecnosti ukladajú s príponou .sh (kvôli prehľadnosti, nie preto, že je to povinné) a musíte im udeliť povolenie na spustenie pomocou `chmod +x script_name.sh` . Odtiaľ ich môžete spustiť pomocou `./ script_name.sh` alebo priamym volaním bash.
bash nombre_script.sh
./nombre_script.sh
Je tiež dôležité pochopiť koncepty stdin, stdout a stderr : štandardný vstup (klávesnica alebo čokoľvek, na čo ho presmerovávate), štandardný výstup (obrazovka) a chybový výstup. Vedieť, ako presmerovať a kombinovať tieto streamy, je kľúčom k písaniu čistých a ľahko laditeľných skriptov.
Skutočné výhody používania Bash skriptov v každodennom živote

Používanie Bashu na automatizáciu nie je len výstrelok administrátorov starej školy; má veľmi jasné výhody. S jedným súborom môžete zabaliť dlhé sekvencie príkazov a spúšťať ich toľkokrát, koľkokrát chcete, konzistentne a bez chýb.
Prvou hlavnou výhodou je automatizácia . Namiesto manuálneho opakovania krokov pri každom nasadení aplikácie alebo vytvorení zálohy všetko napíšete do skriptu a spustíte ho podľa potreby (alebo ho naplánujete pomocou cronu). Menej manuálnej práce, menej hlúpych chýb.
Ďalšou dôležitou výhodou je prenosnosť . Pokiaľ sú príkazy, ktoré používate, dostupné, váš skript bude fungovať na akejkoľvek distribúcii Linuxu, macOS alebo dokonca Windowse s prostredím Bash. Vďaka tomu je migrácia mnohých úloh medzi prostrediami jednoduchá.
Skripty sú tiež veľmi transparentné : sú to len obyčajné texty. Ktokoľvek ich môže otvoriť, zistiť, čo robia, a upraviť ich. Nemusíte nič kompilovať ani dešifrovať binárne súbory. A ak ich skombinujete s Gitom, získate bezplatnú správu verzií a audit zmien.
Nakoniec, naučiť sa Bash je pomerne jednoduché. Ak viete, ako sa orientovať v termináli a máte základné znalosti programovania (premenné, príkazy if, cykly), rýchlo sa zorientujete. A návratnosť investovaného času je obrovská, čo sa týka produktivity.
Vytvorenie a základná štruktúra Bash skriptu
Vytvorenie prvého skriptu je takmer triviálne, ale najlepšie je urobiť to hneď od začiatku. Minimálna kostra skriptu v Bashu by mala zahŕňať šabang, informatívne komentáre, telo skriptu a riadené ukončenie.
Obvyklý spôsob, ako začať, je takto:
#!/bin/bash
# Descripción: pequeño script de ejemplo
echo "Hola, mundo"
Aj keď sa to môže zdať triviálne, vždy je dobré na začiatku zdokumentovať, čo skript robí, aké parametre očakáva a uviesť rýchly príklad použitia. Tieto informácie je možné doplniť pomocou komentárov , ktoré v jazyku Bash začínajú znakom # a interpret ich úplne ignoruje.
Po hlavičke napíšete logiku: definície premenných, čítanie vstupu, volania príkazov, funkcie, slučky, podmienky … všetko, čo potrebujete na automatizáciu danej úlohy.
Ďalším dôležitým detailom je ukončenie skriptu vrátením konzistentného ukončovacieho kódu, napríklad `exit N` . Kód 0 znamená úspech a akákoľvek iná hodnota označuje chybu. Túto hodnotu je možné skontrolovať zvonku pomocou `$?` , čo vám umožňuje reťaziť skripty a reagovať na zlyhania.
Komentáre, premenné a dátové typy v jazyku Bash
Komentáre sú vaši priatelia : sú užitočné na vysvetlenie toho, čo robí časť skriptu, prečo bolo rozhodnutie prijaté alebo čo preboha tá zvláštna slučka urobí o šesť mesiacov, keď na ňu úplne zabudnete. Rovnako ako v mnohých jazykoch, aj v Bash začínajú znakom # a idú na koniec riadku.
Pokiaľ ide o premenné , Bash je veľmi tolerantný: neexistujú žiadne formálne typy, všetko je reťazec a shell sa rozhodne, či má niečo interpretovať ako číslo, keď ho o to požiadate. Na priradenie hodnoty použijete `názov=hodnota` bez medzier okolo znamienka rovnosti.
pais="España"
numero=42
Ak chcete prečítať obsah premennej, uveďte pred ňu znak $ : napríklad $country . Ak chcete väčšiu prehľadnosť alebo spojiť zložité texty, je lepšie použiť znak ${country} na jej správne oddelenie.
Buďte opatrní s úvodzovkami . Pri použití dvojitých úvodzoviek Bash interpretuje premenné a niektoré špeciálne sekvencie ( "$var", "\n" ). Pri použití jednoduchých úvodzoviek sa všetok obsah považuje za doslovný text: '$var' sa vypíše tak, ako je, bez rozšírenia.
Existujú aj špeciálne premenné na spracovanie argumentov a kontextu: $# (počet argumentov), $0 (názov skriptu), $1, $2… (pozičné argumenty), $? (kód ukončenia posledného príkazu), $$ (PID procesu) a mnoho ďalších, ktorých lokalizácia je užitočná.
Vstup a výstup v Bash skriptoch
Užitočný skript zriedka existuje izolovane: zvyčajne vyžaduje údaje od používateľa, číta zo súborov, spracováva protokoly alebo zapisuje výsledky na disk. Na to potrebujete dobrú znalosť príkazov `read`, `echo` a presmerovania.
Najjednoduchší spôsob, ako prečítať niečo, čo používateľ napíše, je pomocou príkazu read :
echo "Introduce tu nombre:"
read nombre
echo "Hola, $nombre"
Na výstup textu na štandardný výstup používame `echo` alebo `printf` . `echo` sa píše jednoduchšie a rýchlejšie, zatiaľ čo `printf` vám dáva úplnú kontrolu nad formátovaním (zarovnanie, desatinné miesta atď.). Akýkoľvek výstup môžete tiež presmerovať do súboru pomocou `>` (prepísať) alebo `>>` (pripojiť).
Napríklad, ak chcete uložiť text „Ahoj svet“ do súboru:
echo "Hola mundo" > hola.txt
Alebo pridať riadky bez vymazania predchádzajúcich:
echo "Otra línea" >> hola.txt
Ak chcete oddeliť normálny výstup od chýb, nezabudnite, že stdout je deskriptor 1 a stderr je deskriptor 2. Môžete ich poslať do rôznych súborov alebo ich dokonca zahodiť do /dev/null, ak ich nepotrebujete.
comando 1>salida.txt 2>errores.txt
comando >/dev/null 2>&1
Základné príkazy Bash pre skriptovanie
Každý Bash skript sa spolieha na sadu základných systémových príkazov . Pravdepodobne ich používate denne, ale pri ich použití v skriptoch je dôležité porozumieť ich syntaxi: nesprávne umiestnená medzera alebo nezvyčajná cesta môžu spôsobiť zlyhanie celého procesu.
Na navigáciu v systéme máte k dispozícii príkazy `pwd` (zobrazuje aktuálny adresár) a `cd` (mení priečinky). Na zobrazenie obsahu použite príkaz `ls` s jeho mnohými možnosťami. Adresáre vytvárajte pomocou príkazu `mkdir` , súbory mazte pomocou `rm` (veľmi opatrne) a súbory presúvajte/kopírujte pomocou `mv` a `cp`.
Medzi typické príkazy na kontrolu textu patria `cat` (zobrazuje súbory), `tac` (obráti), `head` , `tail` a filtrovacie nástroje ako `grep` , `sed` a `awk` . Tieto tvoria základ pre vytváranie skriptov, ktoré analyzujú protokoly, vykonávajú hromadné substitúcie alebo extrahujú špecifické údaje.
Na systémovej úrovni sa oplatí poznať príkazy `ps` a `top` pre procesy, `kill` pre ukončenie procesov, `df` a `du` pre priestor na disku a `systemctl` pre správu služieb v systémoch so systemd. Všetky tieto príkazy sú prirodzene integrované do skriptov.
Nakoniec nezabudnite na `man` : manuál. Takmer na každú otázku týkajúcu sa možností a správania príkazov sa dá odpovedať príkazom `man` . Vedieť plynule čítať manuálovú stránku je polovica úspechu v kariére administrátora.
Riadiace štruktúry: podmienené výrazy a cykly
Ako vaše skripty trochu narastú, budete ich potrebovať na prijímanie rozhodnutí a opakovanie akcií. Tu prichádzajú na rad riadiace štruktúry : if/else, case, while, until a for.
Klasická podmienka v jazyku Bash používa na vyhodnotenie podmienok operátor `if` spolu s operátorom `[ ] `. Napríklad, ak chcete skontrolovať, či je číslo väčšie ako 10:
read num
if ]; then
echo "El número es mayor a 10"
else
echo "El número es menor o igual a 10"
fi
Syntax ] je modernejšia a bezpečnejšia ako a umožňuje pohodlnejšie logické operátory a vylepšenú prácu s reťazcami. V niekoľkých preddefinovaných prípadoch je veľkosť písmen veľmi dobre čitateľná, najmä ak máte viacero očakávaných hodnôt:
read n
case $n in
101) echo "Primer número" ;;
510) echo "Segundo número" ;;
999) echo "Tercer número" ;;
*) echo "Sin coincidencias" ;;
esac
V časti o cykloch sa `while` opakuje, pokiaľ je splnená podmienka, `until` robí opak (opakuje sa, kým nie je podmienka pravdivá) a `for` sa používa na iteráciu cez zoznamy, polia alebo číselné rozsahy. Napríklad slučka `for` na iteráciu cez dni v týždni:
for dia in Lunes Martes Miércoles Jueves Viernes Sábado Domingo; do
echo "Día: $dia"
done
A typická slučka while s interným počítadlom:
i=0
while ]; do
echo $i
((i++))
done
Funkcie v Bash: opätovné použitie logiky bez zbláznenia sa
Funkcie v Bash vám umožňujú zoskupovať príkazy a opakovane ich používať toľkokrát, koľkokrát chcete, vďaka čomu je váš skript oveľa čistejší a lepšie spravovateľný. Ak prekročíte určitú veľkosť a funkcie nepoužívate, skončíte s monštrom, ktoré sa ťažko udržiava.
Môžu byť deklarované dvoma ekvivalentnými spôsobmi:
hola() {
echo "Hola desde una función"
}
function hola2 {
echo "Hola también"
}
Ak ich chcete vyvolať, jednoducho napíšte ich názov na riadok, ako keby to bol akýkoľvek iný príkaz. Nevykonávajú sa len preto, že sú definované, takže nezabudnite ich volať z tela skriptu.
Funkcie prijímajú pozičné parametre presne ako skript: vo vnútri funkcie používate $1, $2, $# atď. Môžete vrátiť číselný kód s return N (určený na označenie úspechu alebo chyby) a globálne premenné na vrátenie bohatších výsledkov, ako sú reťazce alebo polia.
Okrem toho môžete premenné v rámci funkcie označiť ako lokálne , aby „nekontaminovali“ zvyšok skriptu. Toto sa dôrazne odporúča, aby sa predišlo náhodnému prepísaniu globálnych hodnôt.
Polia a manipulácia s textom v Bash
Hoci Bash nie je určený na zložité výpočty, s poľami a reťazcami si poradí dostatočne dobre pre mnoho automatizovaných úloh. Vedieť, ako ich používať, výrazne rozširuje možnosti, ktoré môžete robiť len s niekoľkými príkazmi.
Jednoduché pole je definované takto:
frutas=(Pera Manzana Plátano)
K jednotlivým prvkom pristupujete pomocou premennej ${fruits} , k všetkým prvkom získate pomocou premennej ${fruits} , počet prvkov pomocou premennej ${#fruits} a použité indexy pomocou premennej ${!fruits} . Druhá možnosť je užitočná, keď sú v poli „medzery“ a chcete iterovať iba cez platné pozície.
Na iteráciu celým systémom môžete použiť slučku for na indexoch:
for i in ${!frutas}; do
echo "frutas = ${frutas}"
done
Bash podporuje niekoľko vstavaných operácií s textovými reťazcami : dĺžka ( ${#str} ), podreťazce ( ${str:N:M} ), substitúcie ( ${str/ant/new} , ${str//ant/new} ), orezávanie prefixov a suffixov ( ${str#text} , ${str%text} ) atď. Tieto nástroje eliminujú potrebu používať sed alebo awk pre jednoduché úlohy.
Pre serióznejšiu manipuláciu s textom – napríklad s veľkými protokolmi alebo tabuľkovými údajmi – budete potrebovať grep, sed, awk, cut a podobné funkcie, ktoré môžete reťaziť v pipes alebo integrovať priamo do funkcií Bashu.
Povolenia, vykonávanie a cron: od samostatného skriptu po naplánovanú úlohu
Keď máte skript napísaný, musíte ho spustiť a rozhodnúť sa, ako ho spustíte. Typickým krokom je použiť:
chmod +x mi_script.sh
Odtiaľ ho môžete spustiť pomocou príkazu `./my_script.sh`, ak sa nachádzate v rovnakom adresári, alebo odkazom na jeho absolútnu cestu: `/full/path /my_script.sh`. Ďalšou možnosťou je spustiť ho pomocou príkazu `bash my_script.sh` bez udelenia oprávnení na spustenie, hoci to nie je bežná prax v produkčných prostrediach.
Keď chcete, aby sa skript spúšťal pravidelne (denne, týždenne, každých 5 minút atď.), použite cron . Pomocou `crontab -e` môžete upravovať tabuľku úloh používateľa a definovať veci ako:
0 0 * * * /ruta/backup.sh
*/5 * * * * /ruta/monitor.sh
Prvý riadok spúšťa skript každý deň o polnoci; druhý každých 5 minút. Polia označujú minútu, hodinu, deň v mesiaci, mesiac a deň v týždni v tomto poradí. Čo je už naplánované, si môžete pozrieť pomocou `crontab -l` .
Ak sa niečo pokazí, najlepšie je skontrolovať systémové protokoly . V systémoch Debian/Ubuntu sa správy cron zvyčajne zaznamenávajú do priečinka /var/log/syslog . Ich kontrola vám prezradí, či sa úloha spustila, či zlyhala kvôli problémom s oprávneniami alebo či sa vôbec nespustila.
Ladenie, osvedčené postupy a špeciálne premenné v jazyku Bash
Ladenie skriptov Bash má svoje triky, pretože shell štandardne pokračuje vo vykonávaní, aj keď príkaz zlyhá. Na vyriešenie problému je najlepšie povoliť prísny režim a použiť možnosti ladenia, ktoré Bash ponúka.
Na začiatok skriptu umiestnite niečo takéto:
set -euo pipefail
set -x
Vďaka tomu sa skript zastaví pri prvej chybe ( -e ), nedefinované premenné bude považovať za zlyhania ( -u ), detekuje chyby v kanáloch ( pipefail ) a zobrazí každý rozšírený príkaz pred jeho vykonaním ( -x ). Počas vývoja je to neoceniteľné; v produkcii môžete uprednostniť aktiváciu -x iba v určitých sekciách.
Okrem BASH_REMATCH (veľmi užitočného s regulárnymi výrazmi) má Bash interné premenné ako BASH_SUBSHELL (aktuálna úroveň podshellu), BASH_ENV (súbor načítaný pri spustení podshellu), BASH_EXECUTION_STRING (vykonávaný príkaz) a BASH_VERSION (verzia interpreta). Všetky tieto premenné vám pomôžu prispôsobiť správanie skriptu prostrediu, ladiť nezvyčajné problémy a zabezpečiť kompatibilitu.
Ako ďalšie osvedčené postupy sa odporúča používať popisné názvy premenných , vyhýbať sa rezervovaným slovám, dokumentovať funkcie, vždy overovať vstup používateľa a kontrolovať výstupné kódy kritických príkazov (zálohy, vymazania, hromadné presuny).
A nezabudnite na externé nástroje ako ShellCheck , ktorý analyzuje vaše skripty a upozorňuje vás na jemné chyby, zlé postupy a nebezpečné konštrukty. Jeho integrácia do editora alebo CI/CD pipeline je jednoduchý spôsob, ako zlepšiť kvalitu.
Kolekcie nástrojov Bash a grafických rozhraní pre vaše skripty
Okrem vstavaných funkcií Bashu existujú na GitHube aj výkonné frameworky a kolekcie funkcií , ktoré môžete „zapojiť“ do vlastných skriptov pomocou `source` . To vám umožňuje v priebehu niekoľkých sekúnd začleniť utility, ktorých vývoj by inak trval dlho.
Jedným príkladom je Bashmatic , framework so stovkami funkcií, ktoré uľahčujú všetko od formátovania výstupu a protokolov až po súbežné vykonávanie úloh, správu konfigurácie a interakciu s externými službami. Je silne zameraný na poskytovanie jasnej spätnej väzby vývojárovi počas behu skriptu, čo je obzvlášť cenené, keď vaše procesy trvajú minúty alebo hodiny.
Na paralelné spúšťanie úloh poskytujú projekty ako bash-concurrent pripravenú funkciu, ktorá spúšťa viacero úloh naraz a po ich dokončení zobrazuje zoradený výstup. To je ideálne pre skripty, ktoré potrebujú spracovať veľa nezávislých prvkov (viacero serverov, súborov atď.).
Ak potrebujete ľahké grafické rozhrania nad Bashom, existujú projekty ako EasyBashGUI alebo Script-Dialog , ktoré generujú dialógové okná GUI alebo TUI v závislosti od toho, čo máte nainštalované: kdialog, zenity, whiptail, dialog … Týmto spôsobom môže ten istý skript fungovať dobre, či už ho spustíte z grafického prostredia alebo z čistého terminálu.
Všeobecná myšlienka týchto knižníc je vždy rovnaká: stiahnete alebo naklonujete repozitár a do skriptu pridáte riadok ako ` source /path/to/utilities.sh` . Odvtedy budú všetky funkcie definované v tomto súbore dostupné vo vašom skripte, akoby boli vaše vlastné.
Zvládnutie skriptovania v jazyku Bash a znalosť niekoľkých nástrojov tretích strán vám v konečnom dôsledku poskytne rozsiahly balík nástrojov na automatizáciu Linuxu (a podobných prostredí) bez straty času vynájdením kolesa. Od malých osobných skriptov až po kritické procesy správy systému, kombinácia známych príkazov, jasných riadiacich štruktúr, osvedčených postupov ladenia a externých knižníc robí z Bashu kľúčovú súčasť každého seriózneho technického pracovného postupu.

