Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Tracciato

I bug sono spesso casi di flusso logico inaspettato all'interno di uno script. Vale a dire, parti dello script non vengono mai eseguite, oppure vengono eseguite nell'ordine sbagliato o al momento sbagliato. Per visualizzare il flusso effettivo del programma, utilizziamo una tecnica chiamata tracciato.

Un metodo di tracciamento prevede l'inserimento di messaggi informativi in ​​uno script che mostrano la posizione di esecuzione. Possiamo aggiungere messaggi al nostro frammento di codice:



echo "preparazione all'eliminazione dei file" >&2

se [[ -d $dir_name ]]; allora se cd $dir_name; allora

echo "eliminazione file" >&2

rm *

altro

echo "impossibile passare a '$dir_name'" >&2 exit 1

per altro

echo "nessuna directory: '$dir_name'" >&2 exit 1

fi

echo "eliminazione file completata" >&2

echo "preparazione all'eliminazione dei file" >&2

se [[ -d $dir_name ]]; allora se cd $dir_name; allora

echo "eliminazione file" >&2

rm *

altro

echo "impossibile passare a '$dir_name'" >&2 exit 1

per altro

echo "nessuna directory: '$dir_name'" >&2 exit 1

fi

echo "eliminazione file completata" >&2


Inviamo i messaggi allo standard error per separarli dall'output normale. Inoltre, non indentiamo le righe che contengono i messaggi, così è più facile trovarli quando è il momento di rimuoverli.

Ora, quando lo script viene eseguito, è possibile vedere che l'eliminazione del file è stata eseguita:



[me@linuxbox ~]$ deletion-script preparazione all'eliminazione dei file eliminazione dei file

eliminazione file completata [me@linuxbox ~]$

[me@linuxbox ~]$ deletion-script preparazione all'eliminazione dei file eliminazione dei file

eliminazione file completata [me@linuxbox ~]$


bash fornisce anche un metodo di tracciamento, implementato dall'opzione -x e dal comando set con l'opzione -x. Utilizzando il nostro precedente script di trouble, possiamo attivare il tracciamento per l'intero script aggiungendo l'opzione -x alla prima riga:


#!/bin/bash-x

#!/bin/bash-x

Debug


# problema: script per dimostrare errori comuni numero=1

if [ $numero = 1 ]; poi

echo "Il numero è uguale a 1." altro

echo "Il numero non è uguale a 1."

fi

# problema: script per dimostrare errori comuni numero=1

if [ $numero = 1 ]; poi

echo "Il numero è uguale a 1." altro

echo "Il numero non è uguale a 1."

fi


Una volta eseguito, il risultato sarà il seguente:



[io@linuxbox~]$ guaio

+ numero=1

+ '[' 1 = 1 ']'

+ echo 'Il numero è uguale a 1.' Il numero è uguale a 1.

[io@linuxbox~]$ guaio

+ numero=1

+ '[' 1 = 1 ']'

+ echo 'Il numero è uguale a 1.' Il numero è uguale a 1.


Con la traccia abilitata, vediamo i comandi eseguiti con le espansioni applicate. I segni più iniziali indicano la visualizzazione della traccia per distinguerli dalle righe di output normale. Il segno più è il carattere predefinito per l'output della traccia. È contenuto in PS4 (stringa di prompt 4) variabile shell. Il contenuto di questa variabile può essere modificato per rendere il prompt più utile. Qui, modifichiamo il contenuto della variabile per includere il numero di riga corrente nello script in cui viene eseguita la traccia. Si noti che gli apici singoli sono necessari per impedire l'espansione finché il prompt non viene effettivamente utilizzato:



[io@linuxbox~]$ esporta PS4='$LINENO + '

[io@linuxbox~]$ guaio

5 + numero=1

7 + '[' 1 = 1 ']'

8 + echo 'Il numero è uguale a 1.' Il numero è uguale a 1.

[io@linuxbox~]$ esporta PS4='$LINENO + '

[io@linuxbox~]$ guaio

5 + numero=1

7 + '[' 1 = 1 ']'

8 + echo 'Il numero è uguale a 1.' Il numero è uguale a 1.


Per eseguire una traccia su una porzione selezionata di uno script, anziché sull'intero script, possiamo usare set comando con il -x opzione:


#! / Bin / bash

# problema: script per dimostrare errori comuni numero=1

#! / Bin / bash

# problema: script per dimostrare errori comuni numero=1



set -x # Attiva il tracciamento

if [ $numero = 1 ]; poi

echo "Il numero è uguale a 1." altro

echo "Il numero non è uguale a 1."

fi

set +x # Disattiva il tracciamento


set -x # Attiva il tracciamento

if [ $numero = 1 ]; poi

echo "Il numero è uguale a 1." altro

echo "Il numero non è uguale a 1."

fi

set +x # Disattiva il tracciamento


Usiamo il set comando con il -x opzione per attivare il tracciamento e la +x opzione per disattivare il tracciamento. Questa tecnica può essere utilizzata per esaminare più parti di uno script problematico.


Il miglior sistema operativo cloud computing su OnWorks: