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 arg3
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.
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: