 
                
 Správa argumentů a parametrů je klíčovým prvkem shell skriptů. Umožňuje vám přizpůsobit a personalizovat chování skriptu podle vstupů od uživatele nebo systémových podmínek. V tomto článku se podíváme na to, jak správně spravovat argumenty ve skriptech, jak detekovat povinné a nepovinné argumenty a proč je důležité validovat vstupy pro bezpečnost a robustnost skriptů.
V Bash shellu jsou argumenty skriptu přístupné přes speciální proměnné. Tyto proměnné vám umožňují přístup k jednotlivým argumentům, které jsou zadány při spuštění skriptu. Každý argument zadaný po názvu skriptu je přiřazen k proměnným $1, $2, $3 a tak dále.
Použití:
./skript.sh arg1 arg2 arg3
    V tomto případě:
$1 obsahuje arg1$2 obsahuje arg2$3 obsahuje arg3Proměnná $# reprezentuje počet argumentů, které byly zadány při spuštění skriptu. Příklad:
echo "Počet argumentů: $#"
    Proměnná $@ obsahuje všechny argumenty jako seznam. Můžete ji použít pro iteraci přes všechny argumenty:
for arg in "$@"; do
        echo "Argument: $arg"
    done
    Tímto způsobem se můžete přizpůsobit různým vstupům a dynamicky je zpracovávat ve skriptech.
Pokud chcete detekovat povinné a nepovinné argumenty, můžete využít příkaz shift nebo nástroj getopts. Tento proces je nezbytný, pokud potřebujete, aby skript vykonával různé akce na základě přítomnosti nebo nepřítomnosti určitých argumentů.
Příkaz shift posune všechny argumenty o jedno místo, což vám umožní iterovat přes ně. Je to užitečné, pokud máte delší seznam argumentů a chcete je zpracovat postupně:
while [ $# -gt 0 ]; do
        echo "Zpracovávám argument: $1"
        shift
    done
    Příkaz getopts je ideální pro zpracování volitelných argumentů (jako ve formátu -f, -o, -v). Tento příkaz vám umožňuje definovat specifické volby a jejich parametry ve skriptech.
Použití getopts pro zpracování volitelných argumentů:
while getopts ":f:o:" opt; do
        case $opt in
            f)
                echo "Flag f byl nastaven s hodnotou $OPTARG"
                ;;
            o)
                echo "Flag o byl nastaven s hodnotou $OPTARG"
                ;;
            *)
                echo "Neplatný argument"
                ;;
        esac
    done
    V tomto případě skript detekuje volitelné argumenty -f a -o, které mohou mít hodnoty přiřazené pomocí $OPTARG.
Vstupy do skriptů mohou být interaktivní nebo neinteraktivní. Interaktivní vstupy vyžadují, aby uživatel zadal údaje během běhu skriptu, zatímco neinteraktivní vstupy mohou přijít přímo z argumentů nebo souborů.
Na interaktivní zadávání vstupů můžete použít příkaz read. Tento příkaz umožňuje požádat uživatele o vstup:
echo "Zadejte jméno:"
    read name
    echo "Ahoj, $name!"
    Neinteraktivní vstupy mohou pocházet ze souborů nebo ze skriptů, kde jsou hodnoty automaticky přiřazeny proměnným. Tento způsob je efektivní pro automatizované procesy, kde uživatel neinteraguje přímo se skriptem.
Validace argumentů je klíčová pro zajištění správnosti a bezpečnosti skriptů. Pokud neověříte vstupy, může dojít k neočekávanému chování skriptu, zneužití systému nebo útokům na server.
Příklad jednoduché validace, zda argument obsahuje pouze čísla:
if [[ $1 =~ ^[0-9]+$ ]]; then
        echo "Argument je číslo"
    else
        echo "Argument není číslo"
    fi
    Ověření argumentů před jejich použitím ve skriptech zajišťuje, že váš skript bude robustní a méně náchylný k chybám nebo bezpečnostním problémům.
Vytvoříme skript, který umožní instalaci balíčků nebo zálohování dat na základě argumentů. Tento skript využívá getopts pro zpracování volitelných argumentů.
#!/bin/bash
    while getopts ":i:b:" opt; do
        case $opt in
            i)
                echo "Instaluji balíček $OPTARG"
                sudo apt install $OPTARG
                ;;
            b)
                echo "Zálohuji data do adresáře $OPTARG"
                tar -czf backup_$OPTARG.tar.gz $OPTARG
                ;;
            *)
                echo "Neplatný argument"
                ;;
        esac
    done
    V tomto případě skript provede instalaci balíčku nebo zálohu dat v závislosti na zadaném argumentu.
Pokud se chcete dozvědět více o spravování argumentů v shell skriptech a zlepšit svou schopnost pracovat s automatizovanými procesy, navštivte náš Kurz SHELL – Programování v UNIX shellu pro systémové administrátory.
Viac informacií preberáme na kurze:
