Skriptování je jedním z klíčových nástrojů pro správce systému ke správě sady každodenních činností, jako je spouštění záloh, přidávání uživatelů/skupin, instalace/aktualizace balíčků atd. Při psaní skriptu je jednou z klíčových funkcí zpracování chyb. věci ke správě.
Tento článek ukazuje některé základní/střední techniky řešení chyb ve skriptování Bash. Diskutuji o tom, jak získat chybové kódy, získat podrobný výstup při provádění skriptu, zabývat se funkcí ladění a standardním přesměrováním chyb. Pomocí těchto technik mohou správci systému usnadnit každodenní práci.
[ Čtenářům se také líbilo: Ukončovací kódy příkazového řádku Bash byly demystifikovány ]
Stav ukončení
Ve skriptování Bash $?
vytiskne stav ukončení. Pokud vrátí nulu, znamená to, že nedošlo k chybě. Pokud je nenulová, můžete dojít k závěru, že dřívější úkol má nějaký problém.
Základní příklad je následující:
$ cat myscript.sh
#!/bin/bash
mkdir learning
echo $?
Pokud výše uvedený skript spustíte jednou, vytiskne 0
protože adresář neexistuje, skript jej proto vytvoří. Pokud skript spustíte podruhé, přirozeně získáte nenulovou hodnotu, jak je vidět níže:
$ sh myscript.sh
mkdir: cannot create directory 'learning': File exists
1
Doporučené postupy
Vždy se doporučuje povolit režim ladění přidáním -e
možnost do vašeho shell skriptu, jak je uvedeno níže:
$ cat test3.sh
!/bin/bash
set -x
echo "hello World"
mkdiir testing
./test3.sh
+ echo 'hello World'
hello World
+ mkdiir testing
./test3.sh: line 4: mkdiir: command not found
Pomocí níže uvedeného příkladu můžete napsat ladicí funkci, jak je uvedeno níže, která vám pomůže ji kdykoli vyvolat:
$ cat debug.sh
#!/bin/bash
_DEBUG="on"
function DEBUG()
{
[ "$_DEBUG" == "on" ] && $@
}
DEBUG echo 'Testing Debudding'
DEBUG set -x
a=2
b=3
c=$(( $a + $b ))
DEBUG set +x
echo "$a + $b = $c"
Které vytiskne:
$ ./debug.sh
Testing Debudding
+ a=2
+ b=3
+ c=5
+ DEBUG set +x
+ '[' on == on ']'
+ set +x
2 + 3 = 5
Standardní přesměrování chyb
Všechny systémové chyby můžete přesměrovat do vlastního souboru pomocí standardních chyb, které lze označit číslem 2 . Spusťte jej normálními příkazy Bash, jak je ukázáno níže:
$ mkdir users 2> errors.txt
$ cat errors.txt
mkdir: cannot create directory ‘users’: File exists
Ve skriptech je většinou obtížné najít přesné číslo řádku. Chcete-li vytisknout číslo řádku s chybou, použijte PS4 možnost (podporováno Bash 4.1 nebo novějším). Příklad níže:
$ cat test3.sh
#!/bin/bash
PS4='LINENO:'
set -x
echo "hello World"
mkdiir testing
Při čtení chyb můžete snadno vidět číslo řádku:
$ /test3.sh
5: echo 'hello World'
hello World
6: mkdiir testing
./test3.sh: line 6: mkdiir: command not found
[ Získejte tuto bezplatnou e-knihu:Správa clusterů Kubernetes pro figuríny. ]
Sbalit
Správa chyb je klíčovou dovedností administrátorů při psaní skriptů. Tyto tipy by vám měly usnadnit život při odstraňování problémů se skripty Bash nebo dokonce s obecnými příkazy.