Bash pokračování navazuje na Bash úvod a seznámí Vás s pokročilými technikami skriptovacího jazyka Bash. V této části se dozvíte jak používat proměnné a řídící struktury. Také budete schopni napsat své první jednoduché skripty.
U programování skriptů nepoužívejte diakritiku pro názvy proměnných či funkcí. Na výstupu čeština nevadí, ale u proměnných může způsobovat problémy.
Doporučuji používat následující způsob: \
Pokud chcete na jeden řádek napsat více příkazů, oddělte jej středníkem ; !
Tento magický příkaz slouží k tomu, abyste se svým účtem mohli vykonávat úkony, které může pouze správce. Je to velká výhoda, protože kdyby tento příkaz neexistoval, mohli byste si nedopatřením smazat třeba celý systém.
Pokud při vykonávání programů narazíte na Access Denied nebo Přístup odepřen jedná se o to, že vstupujete do oblasti, kde platí jenom Sudo.
Přístup odepřen může také nastat, pokud máme např. instalujeme balík do systému a chceme jinším programem přistupovat do správy balíků. První proces si totiž zablokuje přístup pro svou činnost a dalšími programy se tam dostanete až po dokončení tohoto procesu.
U Sudo platí také následující věc: Pokud nevíte co děláte nebo si nejste jistí, raději se poraďtě někde na internetu než se do toho pustíte. Radši třikrát měřit než jednou špatně řezat. Největší zkázu tento příkaz provede u rekurzivního mazání rm -fr / ! Pokud na to narazíte na internetu, tak to berte pouze jako vtípek, protože tento příkaz Vám zformátuje celý disk !
V Bashi se komentáře označují znakem mřížky #, všechno za tímto znakem je ignorováno a slouží to především k tomu, abyste ve velkém kusu kódu věděli co dělá která část.
Doporučuji používat hodně komentářů, lépe se pak hledají chyby.
Nyní Vám poradím jak si začít psát vlastní skript.\
#!/bin/bash
* To pak říká interpretu jazyka Bash to, že se jedná o skript.
chmod +x skript.sh
* A tento skript budeme v konzoli spouštět takto:
./skript.sh
* Skript by se měl spustit a ukončit bez chyb, pokud vše dopadlo jak má, skript je připraven.
Pokud jsou na této stránce někde kusy kódu a chybí tam hlavička #!/bin/bash, tak se počítá s tím, že je napsána na prvním řádku.
Pro uchování dat používá každý programovací jazyk proměnné a Bash není výjimkou. Proměnné v Bashi nemají svůj datový typ, proto se do nich dá ukládat cokoliv. Mají pevně definovanou syntax: \
promenna=obsahPromenne
Deklarace je pouze alokování proměnné a definice je přiřazení hodnoty do této proměnné.
Dbejte na to, abyste používali proměnné, které mají již nějakou hodnotu !
Proměnná se skládá ze svého názvu a obsahu.\ Název může obsahovat písmena a čísla (nesmí začínat číslem !), které vystihují to, jakých bude proměnná nabývat hodnot Obsah může být cokoliv, textový řetězec, číslo nebo výstup programů\
Pomocí následující příkladů Vám demonstruji použití proměnných: \
# definice promenne s deklaraci promenna="ahoj svete" # promennou vypiseme pres echo echo "$promenna" # ekvivalentni vypis je take takto, vsimnete si jak ji obteka text echo "data:${promenna}:data" # promenna muze take nest obsah prikazu, používáme speciální uvozovky `` promenna2=`ls` # vypiseme promenna2 echo "$promenna2" # ukazka prepsani promenne pom="ahoj" pom="nazdar" pom="cau" # toto vypise cau, protoze je to posledni vec co se priradila do promenne pom echo "$pom"
Read je příkaz pro získání dat od uživatele.\ Syntaxe: \
read PROMENNA
Následující příkaz mluví za vše: \
echo -n "Zadejte svuj vek: " read vek echo "Vas vek je $vek"
Do proměnné vek je uložen vstup od uživatele a následně vypsán.
If je řídící struktura, která slouží k rozhodovací podmínce jestli něco platí či neplatí dělej.\
Syntaxe: \
# Jednoduchý If if [ podmínka ] ; then kus kódu, který se vykoná pokud platí podmínka fi # Složený If if [ podmínka ] ; then kus kódu, který se vykoná pokud platí podmínka else kus kódu, který se vykoná pokud neplatí podmínka fi # Složený If s dalším If if [ podmínka ] ; then kus kódu, který se vykoná pokud platí podmínka elif [ podmínka2 ] ; then kus kódu, který se vykoná pokud platí podmínka2 fi
Příklad: \
pom="2" if [ ! "$pom" -eq "2" ] ; then echo "Neni to cislo dva" else echo "Je to cislo dva" fi
Podmínky můžou být následující: \
Pokud před výraz napíšu vykřičník !, celý výraz se neguje. Takže pokud mám např. -e soubor že testuje jestli soubor existuje, tak ! -e soubor testuje jestli soubor neexistuje !
Podmínky se dají spojovat do jedné přes operátor && log. AND a || log. OR.\ Abych to vysvětlil matematicky, tak && znamená a současně. Takže musí platit všechny podmínky, aby byla splněna výsledná podmínka. Místo toho || znamená nebo, takže stačí aby platila jedna z podmínek.\ Způsob zápisuje je dvojí: \
if [ -e "$pom" ] && [ -e "$pom2" ] || [ -e "$pom3" ] ; then ...
Testuje jestli současně platí test existence souborů v proměnných pom a pom2. Tyto soubory musí oba existovat aby platila podmínka. Pokud jeden neexistuje, podmínka nikdy platit nebude. V tomto případě je třetí podmínka zbytečná.
Druhý styl je ve výsledku stejný jako u prvního, ale způsob zápisu mně příjde elegantnější:
-o znamená nebo, ||, OR -a znamená a současně, &&, AND if [ -e "$pom" -a -e "$pom2" -o -e "$pom3" ] ; then ...
Switch je takový rozsáhlejší If.
case "$USER" in # promenna $USER root | honza ) # hodnoty: root nebo fuky echo "Ahoj Honzíku" ;; * ) # vsechno ostatni moznosti echo "Ahoj uživateli" ;; esac
While patří k cyklům.
while [ "1" = "1" ] # cyklus vcetne podminky do # smycka po done, co se neustale opakuje, dokud plati podminka #echo echo "Dalsi slovo <enter>, konec <:exit>" echo -n "Vase volba: " read data if [ "$data" = ":exit" ] ; then break # break slouzi k vlastnimu ukonceni cyklu a pokracovani dal, v toku programu fi done # konec cyklu
For patří k posledním zástupcům cyklů. Používáme jej tehdy, když chceme zajistit nějaký určitý (i neurčitý) počet opakování bloku příkazů.
for i in {1..5} # promenna i bude v rozsahu 1 az 5 do # 5x se provede tento blok echo "Promenna i = $i" done # Jina syntaxe = stejny efekt for (( i=1; i<=5; i++ )) do echo "Promenna i = $i" done
Funkce se v bashi mají syntax:
function nazevFunkce { # prikazy pro provedeni funkce }
Funkce se poté ve skriptu volá takto:
nazevFunkce
Tohle je pouze základní přehled nástrojů bashe a jeho použití ve vlastních skriptech. Pro lepší pochopení a naučení se dělání vlastních skriptů, zkuste si podle návodu používat mnou vytvořené skripty.