Debuggare uno script bash

Quando uno script in bash cresce in dimensioni, diventa sempre più difficile trovare eventuali errori nel codice.

La shell GNU bash fornisce a questo scopo alcune funzionalità di debug.

La più immediata ed interessante è la “modalità debug“, che si attiva eseguendo la sotto-shell con l’opzione -x; in questa modalità ogni comando più ogni suo argomento è stampato sullo standard output dopo che le variabili sono state sostituite, ma prima di essere eseguito, ad esempio:

~$ cat script.sh
#!/bin/bash
VARTEST="variabile di test"
echo "$VARTEST"
echo ""
~$ bash -x script.sh
+ VARTEST='variabile di test'
+ echo 'variabile di test'
variabile di test
+ echo ''

~$

Si può attivare la modalità di debug anche solo in un pezzo del codice, in questo modo:

~$ cat script.sh
#!/bin/bash
VARTEST="variabile di test"
set -x
echo "$VARTEST"
set +x
echo ""
~$ bash script.sh
+ echo 'variabile di test'
variabile di test
+ set +x
~$

E’ possibile passare dalla modalità debug alla modalità normale quante volte si vuole all’interno di uno script.

Altro strumento utile è la “modalità di non-esecuzione“; in questa modalità la sintassi viene analizzata in cerca di errori, senza però eseguire i comandi dello script. La modalità è attivabile attraverso l’opzione -n, sia per tutto lo script che per una sua parte soltanto, in maniera analoga all’opzione precedente:

~$ cat script.sh
#!/bin/bash
echo "inizio test"
NUM=2
echo "numero = $NUM"
if [[ 1 -lt $NUM ]]
then
 echo $NUM maggiore di 1
~$ bash -n script.sh
script.sh: riga 8: errore di sintassi: fine di file non attesa
~$

Applicato su una porzione di codice:

~$ cat script.sh
#!/bin/bash
echo "inizio test"
set -n
NUM=2
echo "numero = $NUM"
if [[ 1 -lt $NUM ]]
then
 echo $NUM maggiore di 1
set +n
~$ bash script.sh
inizio test
script.sh: riga 10: errore di sintassi: fine di file non attesa
~$

Tag: , , , ,

Lascia un Commento

ERRORE: il plugin si-captcha.php informa che il supporto GD image non é stato rilevato in PHP!

Contatta il tuo fornitore del servizio di hosting e domada perché il supporto GD image non sia stato abilitato per il PHP.

ERRORE: il plugin si-captcha.php informa che la funzione imagepng non é stata rilevata in PHP!

Contatta il tuo fornitore del servizio di hosting e domada perché la funzione imagepng non sia stata abilitata per il PHP.