Spracovanie argumentov a parametrov je kľúčovým prvkom v shell skriptoch. Umožňuje vám prispôsobiť a personalizovať správanie skriptu podľa vstupov od používateľa alebo systémových podmienok. V tomto článku sa pozrieme na to, ako správne spracovávať argumenty v skriptoch, ako detekovať povinné a nepovinné argumenty, a prečo je dôležité validovať vstupy na zaistenie bezpečnosti a robustnosti skriptov.
V Bash shelli sú argumenty skriptu prístupné cez špeciálne premenné. Tieto premenné vám umožňujú pristupovať k jednotlivým argumentom, ktoré sú zadané pri spustení skriptu. Každý argument, ktorý je zadaný po názve skriptu, sa priradí k premenným $1, $2, $3 a tak ďalej.
Použitie:
./skript.sh arg1 arg2 arg3
V tomto prípade:
$1
obsahuje arg1
$2
obsahuje arg2
$3
obsahuje arg3
Premenná $#
reprezentuje počet argumentov, ktoré boli zadané pri spustení skriptu. Príklad:
echo "Počet argumentov: $#"
Premenná $@
obsahuje všetky argumenty ako zoznam. Môžete ju použiť na iteráciu cez všetky argumenty:
for arg in "$@"; do
echo "Argument: $arg"
done
Týmto spôsobom sa môžete prispôsobiť rôznym vstupom a dynamicky ich spracovávať v skriptoch.
Ak chcete detegovať povinné a nepovinné argumenty, môžete využiť príkaz shift
alebo nástroj getopts
. Tento proces je nevyhnutný, ak potrebujete, aby skript vykonával rôzne akcie na základe prítomnosti alebo neprítomnosti určitých argumentov.
Príkaz shift
posúva všetky argumenty o jedno miesto, čo vám umožňuje iterovať cez ne. Je to užitočné, ak máte dlhší zoznam argumentov a chcete ich spracovať postupne:
while [ $# -gt 0 ]; do
echo "Spracovávam argument: $1"
shift
done
Príkaz getopts
je ideálny na spracovanie voliteľných argumentov (ako vo formáte -f
, -o
, -v
). Tento príkaz vám umožňuje definovať špecifické voľby a ich parametre v skriptoch.
Použitie getopts
pre spracovanie voliteľných argumentov:
while getopts ":f:o:" opt; do
case $opt in
f)
echo "Flag f bol nastavený s hodnotou $OPTARG"
;;
o)
echo "Flag o bol nastavený s hodnotou $OPTARG"
;;
*)
echo "Neplatný argument"
;;
esac
done
V tomto prípade skript deteguje voliteľné argumenty -f
a -o
, ktoré môžu mať hodnoty priradené pomocou $OPTARG
.
Vstupy do skriptov môžu byť interaktívne alebo neinteraktívne. Interaktívne vstupy vyžadujú, aby používateľ zadal údaje počas behu skriptu, zatiaľ čo neinteraktívne vstupy môžu prísť priamo z argumentov alebo súborov.
Na interaktívne zadávanie vstupov môžete použiť príkaz read
. Tento príkaz umožňuje požiadanie používateľa o vstup:
echo "Zadajte meno:"
read name
echo "Ahoj, $name!"
Neinteraktívne vstupy môžu pochádzať zo súborov alebo zo skriptov, kde sa hodnoty automaticky priraďujú premenným. Tento spôsob je efektívny pre automatizované procesy, kde používateľ neinteraguje priamo so skriptom.
Validácia argumentov je kľúčová pre zabezpečenie správnosti a bezpečnosti skriptov. Ak neoveríte vstupy, môže dôjsť k neočakávanému správaniu skriptu, zneužitiu systému alebo útokom na server.
Príklad jednoduchého overovania, či argument obsahuje iba čísla:
if [[ $1 =~ ^[0-9]+$ ]]; then
echo "Argument je číslo"
else
echo "Argument nie je číslo"
fi
Overovanie argumentov pred ich použitím v skriptoch zaisťuje, že váš skript bude robustný a menej náchylný na chyby alebo bezpečnostné problémy.
Vytvoríme skript, ktorý bude umožňovať inštaláciu balíkov alebo zálohovanie dát na základe argumentov. Tento skript využíva getopts
na spracovanie voliteľných argumentov.
#!/bin/bash
while getopts ":i:b:" opt; do
case $opt in
i)
echo "Inštalujem balík $OPTARG"
sudo apt install $OPTARG
;;
b)
echo "Zálohujem dáta do adresára $OPTARG"
tar -czf backup_$OPTARG.tar.gz $OPTARG
;;
*)
echo "Neplatný argument"
;;
esac
done
V tomto prípade skript vykoná inštaláciu balíka alebo zálohu dát v závislosti od zadaného argumentu.
Ak sa chcete naučiť viac o spracovaní argumentov v shell skriptoch a zlepšiť svoju schopnosť pracovať s automatizovanými procesmi, neváhajte navštíviť náš Kurz shell – Programovanie v UNIX shelli pre systémových administrátorov.
Viac informacií preberáme na kurze: