GNU/Linux >> Linux Esercitazione >  >> Linux

Gestione degli errori negli script Bash

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.


Linux
  1. Utilizzo di Bash per l'automazione

  2. Scopri la gestione degli errori di Bash con l'esempio

  3. Eseguire script Bash all'ingresso di una directory?

  4. Digitare -a sta dando un errore nello script?

  5. Condivisione di variabili su più script di shell?

Bash Scripting – Analizza gli argomenti negli script Bash usando getopts

Come creare documenti con gli script Bash

Come utilizzare il comando echo negli script Bash in Linux

Risoluzione dei problemi di errore "Bash:comando non trovato" in Linux

Utilizzo del comando Linux Dirname negli script Bash

Bash Beginner Series #3:Passare argomenti agli script Bash