Abbiamo iniziato la serie di debug degli script della shell spiegando le diverse opzioni di debug e come abilitare le modalità di debug degli script della shell.
Dopo aver scritto i tuoi script di shell, si consiglia di controllare praticamente la sintassi nel script prima di eseguirli, invece di guardare il loro output per confermare che stanno funzionando correttamente.
In questa parte della serie, esamineremo come utilizzare la modalità di debug del controllo della sintassi. Ricorda che abbiamo spiegato le diverse opzioni di debug nella prima parte di questa serie e qui le useremo per eseguire il debug degli script.
Prima di passare all'obiettivo principale di questa guida, esploriamo brevemente il modalità verbosa. È abilitato dal -v
opzione di debug, che dice alla shell di visualizzare tutte le righe in uno script mentre vengono lette.
Per dimostrare come funziona, di seguito è riportato uno script di shell di esempio per convertire in batch immagini PNG in formato JPG.
Digita (o copia e incolla) in un file.
#!/bin/bash. #convertire. per l'immagine in *.png; converti "$immagine" "${immagine%.png}.jpg" echo "immagine $immagine convertita in ${immagine%.png}.jpg" fatto. uscita 0.
Quindi salva il file e rendi eseguibile lo script utilizzando il comando seguente:
$ chmod +x script.sh.
Possiamo invocare lo script e visualizzare tutte le righe al suo interno man mano che vengono lette dalla shell in questo modo:
$ bash -v script.sh.
Tornando al nostro argomento di enfasi, The -n
attiva la modalità di controllo della sintassi. Indica alla shell di leggere sostanzialmente tutti i comandi, tuttavia non li esegue, esamina solo la sintassi utilizzata.
Nel caso in cui ci siano errori nello script della shell, la shell emetterà gli errori sul terminale, altrimenti non visualizzerà nulla.
La sintassi per l'attivazione del controllo della sintassi è la seguente:
$ bash -n script.sh.
Poiché la sintassi nello script è corretta, il comando precedente non visualizzerà alcun output. Pertanto, proviamo a rimuovere il fatto
parola che chiude il ciclo for e verifica se mostra un errore:
Di seguito è riportato lo script shell modificato per convertire in batch le immagini png in formato jpg che contiene un bug.
#!/bin/bash. #script con un bug. #convertire. per l'immagine in *.png; do convert "$image" "${image%.png}.jpg" echo "image $image convertito in ${image%.png}.jpg" exit 0.
Salva il file, quindi eseguilo durante l'esecuzione del controllo della sintassi:
$ bash -n script.sh.
Dall'output sopra, possiamo vedere che c'è un problema di sintassi con il nostro script, al ciclo for manca una chiusura fatto
parola chiave. E la shell lo ha cercato fino alla fine del file e una volta non l'ha trovato (fatto), la shell ha stampato un errore di sintassi:
script.sh: riga 11: errore di sintassi: fine del file imprevista.
Possiamo anche combinare la modalità verbose e la modalità di controllo della sintassi insieme:
$ bash -vn script.sh.
In alternativa, possiamo abilitare il controllo della sintassi modificando la prima riga dello script sopra come nel prossimo esempio.
#!/bin/bash -n #alterare la prima riga di uno script per abilitare il controllo della sintassi #convert. per l'immagine in *.png; do convert "$image" "${image%.png}.jpg" echo "image $image convertito in ${image%.png}.jpg" exit 0.
Come prima, salva il file ed eseguilo mentre esegui il controllo della sintassi:
$ ./script.sh script.sh: riga 12: errore di sintassi: fine imprevista del file
Inoltre, possiamo utilizzare il comando integrato set shell per abilitare la modalità di debug nello script sopra.
Nell'esempio seguente, stiamo solo controllando la sintassi del ciclo for nel nostro script.
#!/bin/bash. #usando il comando integrato set shell per abilitare il debug. #convert #abilita il debug. impostare -n. per l'immagine in *.png; do convert "$image" "${image%.png}.jpg" echo "image $image convertito in ${image%.png}.jpg" #disable debugging. imposta +n. uscita 0.
Ancora una volta, salva il file e richiama lo script:
$ ./script.sh
In sintesi, dovremmo sempre assicurarci di controllare sintatticamente i nostri script di shell per catturare qualsiasi errore prima di eseguirli.
Per inviarci domande o feedback su questa guida, utilizza il modulo di risposta sottostante. Nella terza parte di questa serie, passeremo alla spiegazione e all'uso della modalità di debug del tracciamento della shell.