Cyklus a podmínka: Jak napsat skript, který se rozhoduje za vás

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.

1. Základní syntaxe if-else a vnořování podmínek

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

2. Zkrácené rozhodovací konstrukce (ternární zápis, test příkaz)

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"

3. Základní for cyklus, while a until – kdy který použít

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.

for cyklus

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.

while cyklus

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

until cyklus

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

4. Zpracování výstupu příkazu přes for (např. for i in $(ls))

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.

5. Tipy na debug (echo proměnných, set -e pro ukončení při chybě)

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ů.

Jak začít programovat?

Úvod do programování pro každého bez předchozích znalostí.

Stáhněte si náš ebook teď výjimečně zdarma!!!

Viac informacií preberáme na kurze:

Kurz SHELL - Programování v UNIX shellu pro systémové administrátory

Marián Knězek