1. diel - Skriptovanie v Bashi - úvod do skriptovania
V tomto tutoriále sa začneme učiť programovať v skriptovacom jazyku Bash. Vysvetlíme si, čo to Bash znamená, aký je rozdiel medzi kompilovaným a interpretovaným jazykom a ako automatizovať procesy v Linuxe. Všetky lekcie budú vysvetlené na distribúciu Debian. V dnešnej dobe ide o jednu z najpoužívanejších na serveroch. Pri iných distribúciách sa môže stať, že niektoré príkazy alebo umiestnenie konfiguračných súborov môžu byť odlišné.
Skriptovací vs kompilovaný jazyk
Existujú dva základné druhy jazykov, kompilovaný a skriptovací alebo aj interpretovaný. Hlavný rozdiel je v tom, že program v kompilovanom jazyku sa musí pomocou špeciálneho prekladača, tzv. kompilátora, preložiť do strojového kódu. Ten sa následne uloží do binárneho súboru (slangovej binárky). Binárny (strojový) kód môže byť následne odovzdaný procesoru na spracovanie. Kompilátor prekladá naraz celý program. Skriptovací (interpretovaný) jazyk sa chová odlišne. Pomocou interpretu vyhodnocuje riadok po riadku a odovzdáva ich procesoru na spracovanie postupne.
Uvedieme si to na príklade. Povedzme, že máme v pláne ísť na výlet. Pri kompilovaných jazykoch sa najskôr pozrieme do mapy, zistíme stav dopravy, nastavíme GPS a následne s istotou pôjdeme naplánovanou trasou až do miesta určenia. Pri skriptovacom jazyku vyrazíme na cestu as každým krokom plánujeme ten ďalší. Môže sa stať, že v polovici cesty narazíme na slepú ulicu. V takom prípade program havaruje.
Výhodou kompilovaného jazyka oproti skriptovaciemu je jednoznačne väčšia rýchlosť. Skriptovacie jazyky sú vo všeobecnosti vysokoúrovňové s veľkou dávkou abstrakcie. Lepšie a rýchlejšie sa v nich preto vyvíja. Na rozdiel od kompilovaných jazykov sú tie skriptovacie často multiplatformné.
Predstavitelia kompilovaných jazykov sú napr. C, C++, C# alebo Java. Za skriptovacie jazyky sa považujú napr. Python, PHP, JavaScript alebo práve Bash.
Čo je to Bash
Bourne Again Shell, skrátene Bash, je interpretovaný jazyk využívaný na skriptovanie v Linuxovom alebo UNIXovom shellu. V súčasnej dobe sa jedná o najpoužívanejší skriptovací jazyk vo svete Linuxu. Bash využijeme všade tam, kde sa často opakujú procesy, napr. pri zálohovaní. Bash skripty uplatníme aj tam, kde potrebujeme automatizovať nejaký zložitejší proces. Napr. ak spravujeme firemný doménový server, môže byť pridanie nového zamestnanca do systému zbytočne zdĺhavé. Bash script za nás môže účet zamestnanca vytvoriť, nastaviť potrebné prístupové práva, VPN a pod. Ušetríme tým čas na inú prácu.
Zoznam dostupných Shellov
Ako už bolo povedané, Bash je v dnešnej dobe jeden z najpoužívanejších
jazykov. Nájdeme ho preto vo väčšine distribúcií. Pokiaľ by sme sa chceli
presvedčiť, že je naozaj v našom systéme k dispozícii, stačí si
vypísať obsah súboru /etc/shells
:
cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash
Zároveň si skontrolujeme, či je Bash nastavený ako predvolený shell.
Predvolený shell je uvedený v systémovej premennej SHELL
.
Vypíšeme si preto do konzoly systémové premenné. Môžeme si výpis
sprehľadniť pomocou filtra grep
:
printenv | grep ^shell -i SHELL=/bin/Bash
Ak by ako predvolený shell nebol nastavený Bash, zmeníme to pomocou
príkazu export
:
export SHELL=/bin/bash
Znak ^
pri príkaze grep nám nastaví filter iba
na riadky, ktoré začínajú nasledujúcim reťazcom, v našom prípade SHELL.
Prepínač -i
(--ignore-case) hovorí shellu, že má ignorovať
veľké a malé písmená.
Prvý skript
Teraz si ukážeme, ako v Bashi vytvoriť skript. Skripty sa píšu vždy do
bežných súborov (bez špeciálnej prípony). Nie je preto nutné uvádzať
príponu súboru, pretože pri spustení skriptu Linuxu sami povieme, že má
použiť práve Bash. Už len z konvencie a prehľadnosti je však lepšie ku
skriptu pripísať príponu .sh
(shell). Vytvoríme teda si nový
súbor pre náš skript:
touch script.sh
Je vcelku jedno, v akom editore skript budeme editovať. Môžeme si vybrať,
či nám bude viac vyhovovať terminálový editor (vi, vim, nano) alebo
grafický (gedit, VScode…). Pretože na serveroch často grafické prostredie
chýba, je dobré sa naučiť s terminálovým editorom. V tomto kurze bude
použitý terminálový editor nano
.
nano script.sh
Nasledujúcim scriptom si vypíšeme do konzoly obsah domovského adresára:
#!/bin/bash echo “Toto je výpis obsahu domovského adresáře” ls -l /home/vf
Prvým riadkom hovoríme Linuxu, že ako jazyk používame Bash. Vždy
začína znaky #!
, čo je tzv shebang. Za ním
nasleduje cesta k nášmu skriptovaciemu jazyku. Tú sme si zistili v súbore
/etc/shells
. Pokiaľ by sme používali miesto Bash napr. Perl,
prvý riadok bude začínať #!/bin/Perl
. Príkazom
echo
(ozvena) vypisujeme výstup do konzoly.
Skript uložíme a môžeme ho spustiť. Ako príkaz na spustenie skriptu
použijeme bash
:
bash script.sh Toto je výpis obsahu domovského adresáře drwxr-xr-x 2 vf vf 4096 srp 12 10:12 Desktop drwxr-xr-x 2 vf vf 4096 říj 13 07:39 Documents drwxrwxr-x+ 2 vf vf 4096 zář 20 13:12 Downloads drwxr-xr-x 2 vf vf 4096 srp 12 10:12 Music drwxr-xr-x 3 vf vf 4096 srp 15 15:40 Pictures drwxr-xr-x 2 vf vf 4096 srp 12 10:12 Public drwx------ 5 vf vf 4096 srp 28 18:53 snap drwxr-xr-x 2 vf vf 4096 srp 12 10:12 Templates drwxr-xr-x 2 vf vf 4096 srp 12 10:12 Videos
Script môžeme spustiť aj bez príkazu bash
. Je k tomu ale
potrebné oprávnenie na spúšťanie, ktoré nastavíme príkazom
chmod
:
sudo chmod +x script.sh
Script potom spustíme zadaním absolútnej či relatívnej cesty ku skriptu. Pokiaľ sa nachádzame v rovnakom adresári, relatívna cesta bude vyzerať takto:
./script.sh
Komentáre
Komentár je časť kódu, ktorú interpret pri vykonávaní príkazov
preskočí, akoby v skripte vôbec nebola. Môžeme ho využiť ako poznámku
pre lepšie zorientovanie v kóde alebo na dočasné vyradenie časti kódu.
Komentáre začínajú znakom #
. Na slovenskej klávesnici ho
napíšeme pomocou klávesovej skratky pravý Alt + X:
#!/bin/bash # Toto je komentář a v programu se nijak funkčně neprojeví #echo “Hello World” echo “Ahoj Světe” # komentáře lze psát i za funkční příkaz
Keď si skúsime spustiť tento skript, vypíše sa nám do konzoly iba
riadok Ahoj Světe
:
bash script.sh
Ahoj Světe
Týmto sme sa zoznámili s úplným základom skriptovania v Bashi. Znalosti využijeme v ďalších lekciách pri tvorbe výrazne zložitejších (a zaujímavejších) skriptov.
V ďalšej lekcii sa pozrieme na premenné v Bashi. Povieme si čo je to premenná a ako nám uľahčí prácu pri skriptovaní.