 
                
   V shell skriptech jsou cykly a podmínky klíčové pro automatizaci úkolů. Pomocí jednoduchých příkazů jako if-else, for, while a until můžete vytvořit skripty, které se dokážou rozhodovat, provádět iterace a zpracovávat složité operace bez manuálního zásahu. V tomto článku se podíváme na syntaxi a využití těchto konstrukcí, jak a kdy je nejlépe použít.
Podmínky v shell skriptech umožňují provádět různé akce na základě splnění nebo nesplnění určitých kritérií. Nejčastější způsob, jak vytvářet podmínky v shell skriptech, je použití příkazu if-else.
Základní syntaxe pro if-else vypadá takto:
if [ podmínka ]; then
    # proveď pokud podmínka platí
    else
    # proveď pokud podmínka neplatí
    fi
    Příklad, který kontroluje, zda soubor existuje, vypadá takto:
if [ -f "soubor.txt" ]; then
    echo "Soubor existuje"
    else
    echo "Soubor neexistuje"
    fi
    Podmínky mohou být také vnořeny, což znamená, že můžete vložit další podmínky do bloků if nebo else. Například:
if [ -f "soubor.txt" ]; then
        if [ -r "soubor.txt" ]; then
            echo "Soubor existuje a je čitelný"
        else
            echo "Soubor existuje, ale není čitelný"
        fi
    else
        echo "Soubor neexistuje"
    fi
    Kromě klasického zápisu if-else můžeme používat také zkrácené rozhodovací konstrukce, jako ternární zápis, který je kompaktní a velmi užitečný pro jednoduchá rozhodnutí v skriptech.
Ternární zápis je v shellu obvykle realizován pomocí příkazu test nebo pomocí krátkého zápisu v jednom řádku:
[ podmínka ] && příkaz_ pokud_platí || příkaz_ pokud_neplatí
    Příklad:
[ -f "soubor.txt" ] && echo "Soubor existuje" || echo "Soubor neexistuje"
    Tento příkaz provede echo "Soubor existuje", pokud soubor existuje, jinak provede echo "Soubor neexistuje".
Stejně můžeme využít příkaz test, který je ekvivalentem příkazu [ ], pro jednoduché podmínky:
test -f "soubor.txt" && echo "Soubor existuje" || echo "Soubor neexistuje"
    Cyklus for je nejběžněji používaný pro iterování přes seznam hodnot, zatímco while a until jsou vhodné pro provádění opakovaných operací na základě podmínky.
Cyklus for se používá pro iterování přes seznam hodnot nebo příkazů. Základní syntaxe vypadá takto:
for i in seznam; do
        # proveď příkaz
    done
    Příklad:
for i in $(ls); do
        echo "Soubor: $i"
    done
    Tento příkaz iteruje přes všechny soubory v aktuálním adresáři a vypíše jejich názvy.
Cyklus while se provádí, dokud platí daná podmínka. Tento cyklus je užitečný, pokud nevíte předem, kolikrát se cyklus provede. Základní syntaxe:
while [ podmínka ]; do
        # proveď příkaz
    done
    Příklad:
count=1
    while [ $count -le 5 ]; do
        echo "Počet: $count"
        ((count++))
    done
    Cyklus until se provádí, dokud podmínka není splněná. Je to opak cyklu while, protože se provádí, dokud podmínka neplatí.
until [ podmínka ]; do
        # proveď příkaz
    done
    Příklad:
count=1
    until [ $count -gt 5 ]; do
        echo "Počet: $count"
        ((count++))
    done
    V shellu je velmi užitečné zpracovávat výstupy příkazů jako vstupy pro cykly. Příkaz for i in $(ls) je běžný způsob, jak iterovat přes seznam souborů v adresáři.
Příklad:
for i in $(ls /home/user); do
        echo "Soubor: $i"
    done
    Výhodou použití tohoto typu cyklu je, že můžete provádět operace na každém souboru, jako je kopírování, změna práv, nebo jiné manipulace.
Debugging je nezbytnou součástí psaní shell skriptů. Při vytváření a testování skriptů je velmi užitečné zobrazit hodnoty proměnných a sledovat, co se děje v každém kroku.
Příkaz echo je velmi užitečný pro vypisování hodnot proměnných:
echo "Proměnná i: $i"
    Dalším užitečným příkazem je set -e, který způsobí, že skript se zastaví při první chybě. Toto je užitečné pro zjistění přesného místa, kde skript selhal:
set -e
    Pomocí těchto nástrojů můžete efektivně odhalit problémy a upravit skripty tak, aby fungovaly podle očekávání.
Pokud se chcete dozvědět více o cyklech, podmínkách a automatizaci úloh v shellu, navštivte náš Kurz SHELL – Programování v UNIX shellu pro systémové administrátory, kde se naučíte efektivně spravovat systémy pomocí shell skriptů.
Viac informacií preberáme na kurze:
