Cyklus a podmienka: Ako napísať skript, ktorý sa rozhoduje za vás

V shell skriptoch sú cykly a podmienky kľúčové pre automatizáciu úloh. Pomocou jednoduchých príkazov ako if-else, for, while a until môžete vytvoriť skripty, ktoré sa dokážu rozhodovať, vykonávať iterácie a spracovávať komplexné operácie bez manuálneho zásahu. V tomto článku sa pozrieme na syntax a využitie týchto konštrukcií, ako aj na to, kedy je najvhodnejšie použiť každú z nich.

1. Štandardná syntax if-else a vnáranie podmienok

Podmienky v shell skriptoch umožňujú vykonávať rôzne akcie na základe splnenia alebo nesplnenia určitých kritérií. Najbežnejším spôsobom, ako vytvoriť podmienky v shell skriptoch, je použitie príkazu if-else.

Základná syntax pre if-else vyzerá takto:

if [ podmienka ]; then # vykonaj ak podmienka platí else # vykonaj ak podmienka neplatí fi

Príklad, ktorý kontroluje, či súbor existuje, by vyzeral takto:

if [ -f "subor.txt" ]; then echo "Súbor existuje" else echo "Súbor neexistuje" fi

Podmienky môžu byť vnorené, čo znamená, že môžete vložiť ďalšie podmienky do blokov if alebo else. Napríklad:

if [ -f "subor.txt" ]; then if [ -r "subor.txt" ]; then echo "Súbor existuje a je čitateľný" else echo "Súbor existuje, ale nie je čitateľný" fi else echo "Súbor neexistuje" fi

2. Skúpené rozhodovacie konštrukcie (ternárny zápis, test príkaz)

Okrem klasického zápisu if-else môžeme používať aj skrátené rozhodovacie konštrukcie, ako ternárny zápis, ktorý je kompaktný a veľmi užitočný pre jednoduché rozhodnutia v skriptoch.

Ternárny zápis je v shelli zvyčajne realizovaný pomocou príkazu test alebo pomocou krátkeho zápisu v jednom riadku:

[ podmienka ] && príkaz_ak_platí || príkaz_ak_neplatí

Príklad:

[ -f "subor.txt" ] && echo "Súbor existuje" || echo "Súbor neexistuje"

Tento príkaz vykoná echo "Súbor existuje" ak súbor existuje, inak vykoná echo "Súbor neexistuje".

Podobne môžeme využiť príkaz test, ktorý je ekvivalentom príkazu [ ], pre jednoduché podmienky:

test -f "subor.txt" && echo "Súbor existuje" || echo "Súbor neexistuje"

3. Základný for cyklus, while a until – kedy ktorý použiť

Cyklus for je najbežnejšie používaný pre iteráciu cez zoznam hodnôt, zatiaľ čo while a until sú vhodné na vykonávanie opakovaných operácií na základe podmienky.

for cyklus

Cyklus for sa používa na iterovanie cez zoznam hodnôt alebo príkazov. Základná syntax vyzerá takto:

for i in zoznam; do # vykonaj príkaz done

Príklad:

for i in $(ls); do echo "Súbor: $i" done

Tento príkaz iteruje cez všetky súbory v aktuálnom adresári a vypíše ich názvy.

while cyklus

Cyklus while sa vykonáva, pokiaľ platí daná podmienka. Tento cyklus je užitočný, ak neviete vopred, koľkokrát sa cyklus vykoná. Základná syntax:

while [ podmienka ]; do # vykonaj príkaz done

Príklad:

count=1 while [ $count -le 5 ]; do echo "Počet: $count" ((count++)) done

until cyklus

Cyklus until sa vykonáva, pokiaľ podmienka nie je splnená. Je to opak cyklu while, pretože sa vykonáva, dokiaľ podmienka neplatí.

until [ podmienka ]; do # vykonaj príkaz done

Príklad:

count=1 until [ $count -gt 5 ]; do echo "Počet: $count" ((count++)) done

4. Spracovanie výstupu príkazu cez for (napr. for i in $(ls))

V shelli je veľmi užitočné spracovávať výstupy príkazov ako vstupy do cyklov. Príkaz for i in $(ls) je bežným spôsobom, ako iterovať cez zoznam súborov v adresári.

Príklad:

for i in $(ls /home/user); do echo "Súbor: $i" done

Výhodou použitia tohto typu cyklu je, že môžete vykonať operácie na každom súbore, ako je kopírovanie, zmena práv, alebo iné manipulácie.

5. Tipy na debug (echo premenných, set -e pre ukončenie na chybe)

Debugging je neoddeliteľnou súčasťou písania shell skriptov. Pri vytváraní a testovaní skriptov je veľmi užitočné zobraziť hodnoty premenných a sledovať, čo sa deje v každom kroku.

Príkaz echo je veľmi užitočný na vypisovanie hodnôt premenných:

echo "Premenná i: $i"

Ďalším užitočným príkazom je set -e, ktorý spôsobí, že skript sa zastaví pri prvej chybe. Toto je užitočné na zistenie presného miesta, kde skript zlyháva:

set -e

Pomocou týchto nástrojov môžete efektívne odhaliť problémy a upravit skripty tak, aby fungovali podľa očakávaní.

Ak sa chcete dozvedieť viac o cykloch, podmienkach a automatizácii úloh v shelli, navštívte náš Kurz shell – Programovanie v UNIX shelli pre systémových administrátorov, kde sa naučíte efektívne spravovať systémy pomocou shell skriptov.

Ako začať programovať?

Úvod do programovania pre každého bez prechádzajúcich znalostí.

Stiahnite si náš ebook teraz výnimočne zdarma!!!

Viac informacií preberáme na kurze:

Kurz SHELL - Programovanie v UNIX shelli pre systémových administrátorov

Marián Knězek

 

Súvisiace články: