Odkazy:
Člověk je tvor chybující, a programátor/administrátor by si to měl uvědomovat dvakrát. Jeho největším nepřítelem jsou vlastní chyby. Abych nezůstal jen v obecné rovině, ukažme si příklad.
dir=$1 … rm -fr $dir/bin
Na první pohled je patrné, co se ve skriptu děje. Mažeme podadresář bin zadaného adresáře jenž byl předán jako první parametr ve skriptu. Jasné, pochopitelné. A nyní si představme, a opravdu to nezkoušejme, že uživatel skriptu zapomene zadat parametry skriptu. Proměnná dir
bude prázdná a příkaz pro mazání se provede jako rm -fr /bin. Tohle jsme ale vůbec nezamýšleli. Pokud skript spustí administrátor, a zapomene zadat parametry, pohroma je na světě. Podobných nešťatných chyb, které vlastně nejsou chybami v pravém slova smyslu, je možno udělat více. Nyní si ukážeme různé techniky jak podobným situacím předejít.
Nejdříve se podíváme na možnosti nastavení bashe. Máme řadu přepínačů na příkazové řádce kterými ovlivníme chování bashe. Tyto přepínače/volby se dají nastavit i programově, "zevnitř" programu, pomocí příkazu set.
Nastavení set -u (set -o nounset), způsobí že bash považuje za chybu použití jakékoliv proměnné, jejíž obsah nebyl před tímto použitím definován. Tedy proměnné jenž nebyla "inicalizována".
Nastavení set -e (set -o errexit), způsobí ukončení vykonávání programu pokud libovolný příkaz skončí s chybou. Toto nastavení, tedy tato změna chování bashe, vyžaduje změnu přístupu v programování. Již nemůžeme použít něco takovéhoto:
příkaz
if [[ $? != 0 ]]; then
echo "Příkaz neuspěl"
# ošetření chyby
fi
Pokud se chceme dostat k návratové hodnotě příkazu, využjeme možnosti spojení příkazů operátorem ||
.
#!/bin/bash set -o errexit cd /nikam || echo "\$?=$?"