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

*