Argumenty v shell skriptu: Neomezené možnosti personalizace a funkčnosti

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

1. Přístup k $1, $2, … $# a $@ v shellu

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ě:

Promě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.

2. Detekce nepovinných a povinných argumentů (shift, getopts)

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

Shift

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

Getopts

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.

3. Interaktivní vs. neinteraktivní zadávání vstupů

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

Interaktivní vstupy

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

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.

4. Proč je důležité validovat argumenty (bezpečnost, robustnost)

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.

5. Příklad skriptu s více možnostmi – instalace balíčků, záloha dat

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.

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