blog.johanka.net

Anatomie Bash skriptu

Čtenáři tohoto blogu si už bezpochyby všimli, že mnoho skriptů v Bashi obsahuje následující schéma

#!/bin/bash

if [...] ; then

...

fi

exit 0

nebo nějakou variaci na ně.

Často se nachází v exekutovatelných souborech s příponou .sh (nemusíte zadávat heslo pro root, abyste je mohli spouštět).

Když například chci vytvořit jednoduchý skript, který z flashdisku vymaže všechny přebytečné skryté soubory, vytvořím nový soubor s příponou .sh, v příkazové řádce zadám

chmod 700 USBclean.sh

otevřu soubor v editoru a vložím do něj tento kód

#!/bin/bash

if [ -d /umístění/USB ] ; then

cd /umístění/USB

rm ._* && echo "Soubory byly úspěšně smazány." || echo "Nebyly nalezeny žádné odpovídající soubory."

fi

exit 0

Umístění USB zjistíte např. tak, že ve stejném adresáři zadáte příkaz pwd.

Část skriptu uvnitř hranatých závorek zjišťuje, zda adresář existuje (USB je připojeno), a v případě, že příkaz smazat soubory nemohl být proveden, protože žádné takové soubory na připojeném flashdisku nejsou, zobrazí se v Terminálu sdělení za dvěma svislými linkami.

Skript spustíte, když ze stejného adresáře, v němž je umístěn daný soubor, v Terminálu zadáte

./USBclean.sh

Můžete si samozřejmě vytvořit zkratku a přidat do souboru .bashrc např. následující text

alias usbdel="umístění/souboru/USBclean.sh"

Ke spuštění tohoto skriptu pak bude stačit, když hned po otevření Terminálu zadáte

usbdel

Zkusme si teď vytvořit jednoduchou variaci na výše uvedené schéma.

#!/bin/bash

if [ $date "+%w" = 1 ] ; then

cd $HOME/Plocha && xed agenda.txt || echo "Seznam úkolů na tento týden dosud nebyl vytvořen."

else

cd $HOME/Plocha && head -n 3 agenda.txt > dnes.txt && echo "Hezký den!" >> dnes.txt && cat dnes.txt

fi

exit 0

Převedeno do češtiny: Je-li dnešní den prvním dnem v týdnu (pondělí), otevřeme na ploše ($HOME je proměnná a zastupuje domovský adresář uživatele) soubor s názvem agenda.txt (můžete si jej samozřejmě pojmenovat jinak). V ostatních případech (je-li dnes jiný den než pondělí), přejdeme do stejné složky, první tři řádky ze souboru agenda.txt zkopírujeme do souboru dnes.txt, přidáme vzkaz "Hezký den!" a necháme zobrazit obsah souboru v okně Terminálu. Můžete si samozřejmě vytvořit zkratku a spouštět tento skript např. tak, že v Terminálu zadáte PO nebo ag. Když zadáte

man date

otevře se vám stránka manuálu s přehledným seznamem možností, kterými můžete nahradit %w na začátku skriptu nebo je použít pro druhý if statement. Pohrejte si s tím. Fascinuje mě ta variabilita a kolik zábavy se i na tak prosté a jednoduché věcičce dá najít.

Můžete si svá novoroční předsevzetí rozdělit do splnitelných kroků na jednotlivé týdny či měsíce. Takováto jednoduchá automatizace se samozřejmě dá dotáhnout ještě o krok dál, více o tom později.

Pokud jste nepřesedlali na něco dobrodružnějšího, určitě si budete chtít vyzkoušet poslední aktualizaci Linuxu Mint. Ti nejšikovnější už samozřejmě spokojeně hackují Debiana, což bylo ostatně mým cílem. :-) Jen tak dál. Rozhodně budu s tímto blogem pokračovat i v novém roce. Jelikož si však vždy se vším, co zde uvádím, poctivě sama hraju, budu se asi držet tempa plus mínus dva nové příspěvky za měsíc.

copy left Johanka Piskovská, 2020