Lo scripting è uno degli strumenti chiave per un amministratore di sistema per gestire una serie di attività quotidiane come l'esecuzione di backup, l'aggiunta di utenti/gruppi, l'installazione/l'aggiornamento di pacchetti, ecc. Durante la scrittura di uno script, la gestione degli errori è uno degli aspetti cruciali cose da gestire.
Questo articolo mostra alcune tecniche di base/intermedie per gestire la gestione degli errori negli script Bash. Discuto come ottenere i codici di errore, ottenere un output dettagliato durante l'esecuzione dello script, gestire la funzione di debug e il reindirizzamento degli errori standard. Utilizzando queste tecniche, gli amministratori di sistema possono semplificare il loro lavoro quotidiano.
[ Ai lettori è piaciuto anche: codici di uscita dalla riga di comando di Bash demistificati ]
Stato di uscita
Nello script Bash, $?
stampa lo stato di uscita. Se restituisce zero, significa che non ci sono errori. Se è diverso da zero, puoi concludere che l'attività precedente ha qualche problema.
Un esempio di base è il seguente:
$ cat myscript.sh
#!/bin/bash
mkdir learning
echo $?
Se esegui lo script sopra una volta, verrà stampato 0
poiché la directory non esiste, quindi lo script la creerà. Naturalmente, otterrai un valore diverso da zero se esegui lo script una seconda volta, come mostrato di seguito:
$ sh myscript.sh
mkdir: cannot create directory 'learning': File exists
1
Migliori pratiche
Si consiglia sempre di abilitare la modalità di debug aggiungendo il -e
opzione per lo script della shell come di seguito:
$ 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
Puoi scrivere una funzione di debug come di seguito, che aiuta a chiamarla in qualsiasi momento, utilizzando l'esempio seguente:
$ 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"
Quali stampe:
$ ./debug.sh
Testing Debudding
+ a=2
+ b=3
+ c=5
+ DEBUG set +x
+ '[' on == on ']'
+ set +x
2 + 3 = 5
Reindirizzamento errore standard
Puoi reindirizzare tutti gli errori di sistema a un file personalizzato utilizzando gli errori standard, che possono essere indicati dal numero 2 . Eseguilo con i normali comandi Bash, come mostrato di seguito:
$ mkdir users 2> errors.txt
$ cat errors.txt
mkdir: cannot create directory ‘users’: File exists
Nella maggior parte dei casi, è difficile trovare il numero di riga esatto negli script. Per stampare il numero di riga con l'errore, usa la PS4 opzione (supportata con Bash 4.1 o successivo). Esempio sotto:
$ cat test3.sh
#!/bin/bash
PS4='LINENO:'
set -x
echo "hello World"
mkdiir testing
Puoi facilmente vedere il numero di riga durante la lettura degli errori:
$ /test3.sh
5: echo 'hello World'
hello World
6: mkdiir testing
./test3.sh: line 6: mkdiir: command not found
[ Ottieni questo ebook gratuito:Gestione dei cluster Kubernetes per i manichini. ]
Concludi
La gestione degli errori è un'abilità chiave per gli amministratori durante la scrittura di script. Questi suggerimenti dovrebbero aiutarti a semplificarti la vita durante la risoluzione dei problemi relativi agli script Bash o persino ai comandi generali.