Come eseguire il debug di una sceneggiatura bash?

Come eseguire il debug di una sceneggiatura bash?

Qualsiasi programma deve essere privo di errori prima che raggiunga i consumatori. Gli sviluppatori di software fanno del loro meglio per rendere i programmi software senza bug. Ma è difficile creare un codice impeccabile quando ci sono migliaia di righe. Il debug è un processo in corso; Aiuta a rilevare immediatamente gli errori, raccogliendo preziose informazioni sul codice ed eliminando blocchi di codice ridondante.

Tutti i linguaggi di programmazione hanno alcuni approcci comuni e pochi distinti per trovare bug. Ad esempio, i programmi di debug possono essere utilizzati per rimuovere rapidamente gli errori. Mentre lo scripting di shell non ha alcun strumento particolare per eseguire il debug del codice. Questo articolo riguarda la discussione di varie tecniche di debug che possono essere utilizzate per rendere senza errori lo script bash. Prima di immergerci nei metodi, abbiamo una comprensione di base delle conchiglie e degli script di shell:

Cos'è la shell in Linux?

Quando si avvia il computer, il kernel riceve informazioni sull'hardware allegato e consente ad altri componenti collegati di interagire. Oltre a ciò, gestisce la memoria, CPU e riconosce qualsiasi nuova periferica. Tutto sommato, un kernel è la spina dorsale di qualsiasi sistema operativo. Ma hai mai pensato di interagire direttamente con il kernel, comanderlo di eseguire un'attività specifica? È anche praticabile farlo? Assolutamente! Con l'aiuto di una shell, un programma per computer con un'interfaccia interattiva, chiunque può far funzionare il kernel. Il guscio consente agli umani di interagire con il kernel e istruirlo per svolgere qualsiasi attività.

In Unix, ci sono due gusci principali Bourne Shell E C shell. Entrambi questi tipi hanno le loro sottocategorie. Diversi tipi di gusci di bourne sono Korn Shell (KSH), Almquist Shell (Ash), Bourne Again Shell (Bash), E Z Shell (ZSH). Allo stesso tempo, la shell C ha le sue sottocategorie come S Shell (CSH) E Shell Tenex C (TCSH). Come accennato in precedenza, tra tutti i gusci, Bash (Bourne Again Shell) è il guscio più utilizzato ed esce dalla scatola in molte distribuzioni Linux a causa della sua efficienza e facilità d'uso.

Bash è la shell predefinita di molte distribuzioni Linux ed è ampiamente utilizzato da milioni di utenti Linux. È così diversificato e influente che può svolgere ogni compito che di solito si svolgono in applicazioni basate sulla GUI. Puoi modificare file, gestire i file, visualizzare le foto, ascoltare musica, riprodurre video e molto altro.

Cos'è uno script di shell:

Come abbiamo imparato l'idea di base di Shell, ora ci muoviamo verso lo scripting di shell. Lo script shell è un programma per computer che esegue più comandi in una shell che funge da interprete per eseguire una funzione specifica. Come discusso sopra, ci sono 2 tipi particolari di conchiglie. Tuttavia, questa guida si sta concentrando sul Bourne Again Shell (Bash).
Allora cos'è una sceneggiatura di Bash? In Linux, tutti i comandi bash sono archiviati in "/Usr/bin" e "/bin" cartelle. Ad esempio, ogni volta che esegui un comando, Bash cerca se esiste nella directory o no. Il comando viene eseguito se trova nelle directory altro dà un errore.

Che ne dici di eseguire un'attività che necessita di più comandi da eseguire nel terminale? In questa situazione specifica, Bash Scripting può aiutarti. Bash Scripting è una forma di script di shell che consente di effettuare programmi per eseguire più comandi bash per eseguire un'attività specifica.

Cosa sono i bug negli script bash:

Mentre si lavora con Bash Scripting o con altri linguaggi di programmazione, si incontrano molti errori. Un bug è un errore o un errore nel programma che può causare il comportamento in modo errato.

Ogni linguaggio di programmazione ha una propria procedura per trovare bug; Allo stesso modo, Bash ha anche molte opzioni di accesso per eseguire il debug di un programma terminale.

Gestire errori e debug di un programma non è meno di una seccatura. È un lavoro che richiede tempo e può peggiorare se non sei a conoscenza degli strumenti giusti per eseguire il debug del programma. Questo articolo è una guida completa sul debug di Bash-Scripts per rendere il tuo script senza errori. Quindi iniziamo:

Come eseguire il debug di una sceneggiatura bash:

Quando lavori su grandi progetti di programmazione, si incontrano molti errori o bug. Il debug di un programma a volte può essere complicato. I programmatori di solito utilizzano strumenti di debug e molti editor di codice aiutano anche a trovare bug evidenziando la sintassi.

Esistono vari strumenti in Linux per il debug di codici, ad esempio il debugger GNU aka "GDB."Strumenti come GDB sono utili per i linguaggi di programmazione che si compilano in binari. Poiché Bash è una lingua interpretata semplice, non è necessario che gli strumenti pesanti lo debugino.

Esistono varie tecniche tradizionali per eseguire il debug di un codice di scripting bash e uno di questi sta aggiungendo “Affermazioni." Le asserzioni sono condizioni aggiunte nei programmi per verificare le condizioni specifiche ed eseguire il programma di conseguenza. È una tecnica difensiva che aiuta anche a trovare bug e test. Puoi trovare molti strumenti che aiutano ad aggiungere affermazioni negli script bash.

Bene, l'aggiunta di affermazioni è una delle vecchie tecniche tradizionali. Ci sono set di flag/opzioni disponibili in bash per eseguire il debug di uno script bash. Queste opzioni possono essere aggiunte insieme a shebang negli script o aggiunte durante l'esecuzione del programma nel terminale. Gli argomenti che faremo sono elencati di seguito:

  1. Come eseguire il debug di script bash Verbosio "-v" opzione
  2. Come eseguire il debug di script bash usando Xtrace "-x" opzione
  3. Come eseguire il debug di script bash usando noexec "-n" opzione
  4. Come identificare il Variabili nont Durante il debug di Bash Script
  5. Come eseguire il debug del parte specifica della sceneggiatura di Bash
  6. Come eseguire il debug di uno script bash usando il "trappola" comando
  7. Come eseguire il debug di una sceneggiatura di Bash eliminando file globbing usando il "-F" opzione
  8. Come Combina Opzioni di debug per eseguire il debug di uno script di shell
  9. Come Reindirizzare il report di debug a un file

Quindi controlliamo varie tecniche in Bash per eseguire il debug di una sceneggiatura bash:

Come eseguire il debug di script bash abilitando l'opzione “-v” verbosa:

Uno degli approcci più semplici per il debug, lo script bash sta usando il "-V" Opzione, nota anche come verbosio. L'opzione può essere aggiunta con lo shebang o esplicitamente inserita con il nome del file di script durante l'esecuzione. L'opzione Verbose eseguirà e stampa ogni riga del codice come processo dell'interprete. Capiamolo con un esempio di script bash:

#! /Bin/Bash
Echo "Enter Number1"
Leggi il numero1
Echo "Enter Number2"
Leggi il numero2
if ["$ NUMBER1" -GT "$ NUMBER2"]
Poi
Echo "Number1 è maggiore di Number2"
Elif ["$ NUMBER1" -EQ "$ NUMBER2"]
Poi
Echo "Number1 è uguale a Number2"
altro
Echo "Number2 è maggiore di Number1"
fi

Il codice sopra sta ottenendo due numeri dall'utente e quindi esegue alcune istruzioni condizionali per verificare se il numero è più significativo, meno o uguale all'altro numero. Sebbene qualsiasi editor di testo possa essere utilizzato per gli script bash, sto usando VIM Editor. Vim è un editor potente e ricco di funzionalità che evidenzia la sintassi degli script bash e riduce le possibilità di errori di sintassi. Se non si dispone di Editor VIM, ottenerlo eseguendo il comando menzionato di seguito:

$ sudo apt install vim

Crea un file di script bash usando:

$ vim b_script.sh

Se sei nuovo all'editor VIM, ti consiglio di imparare a utilizzare l'editor VIM prima di procedere.

Ora, torniamo allo script, esegui lo script usando "-V" opzione:

$ bash -v b_script.sh

Si può vedere nell'output sopra che ogni riga dello script è stampata nel terminale mentre elaborano dall'interprete. Si noti che lo script smetterà di prendere input dall'utente e quindi elaborare la riga successiva dello script. Come discusso sopra che il "-V" L'opzione può essere posizionata dopo shebang come mostrato nel seguente:

#! /bin/bash -v

Allo stesso modo, la bandiera verbosa può essere aggiunta anche nella riga successiva di shebang usando il "impostato" comando:

#! /Bin/Bash
set -v

Uno dei metodi discussi sopra può abilitare verbose.

2 Come eseguire il debug di script bash usando l'opzione Xtrace "-x":

L'esecuzione traccia, nota anche come Xtrace, è un'opzione di debug intelligente e utile, in particolare per tracciare errori logici. Gli errori logici sono generalmente associati a variabili e comandi. Per controllare lo stato della variabile durante l'esecuzione dello script, utilizziamo il "-X" opzione. Ora di nuovo, esegui il “B_script.sh" file con il "-X" bandiera:

$ bash -x b_script.sh

L'output mostra esplicitamente il valore di ciascuna variabile durante il processo di esecuzione. Ancora una volta, il "-X" può essere usato accanto allo shebang e dopo la riga di shebang usando il comando set. Xtrace mette il segno "+" con ogni riga dello script.

3 Come eseguire il debug di script bash usando l'opzione Noexec "-n":

Gli errori di sintassi sono una delle cause principali di bug. Per debug sintatticamente lo script bash, usiamo "Noexec" (nessuna esecuzione) Modalità. L'opzione utilizzata per la modalità NOEXEC è "-N." Visualirà solo gli errori di sintassi del codice invece di eseguirlo. Un approccio molto più sicuro per il debug del codice. Eseguiamo “B_script.sh" di nuovo con il "-N" opzione:

$ bash -n b_script.sh

Non ci sarà esecuzione di codice se non vi è alcun errore di sintassi. Ora modifichiamo il nostro codice:

#! /Bin/Bash
Echo "Enter Number1"
Leggi il numero1
Echo "Enter Number2"
Leggi il numero2
if ["$ NUMBER1" -GT "$ NUMBER2"]
Poi
Echo "Number1 è maggiore di Number2"
Elif ["$ NUMBER1" -EQ "$ NUMBER2"]
#Poi
Echo "Number1 è uguale a Number2"
altro
Echo "Number2 è maggiore di Number1"
fi

Sto commentando "Poi" Dopo "Elif". Ora, con "-n" eseguire “B_script.sh" Script:

$ bash -n b_script.sh

Come anticipato, ha chiaramente identificato l'errore e lo ha visualizzato nel terminale.

4 Come identificare le variabili nont durante il debug di Bash Script:

Fare un errore di battitura mentre si scrive un codice è comune. Spesso, si fissi una variabile, che non consente di eseguire il codice. Per identificare un tale errore, utilizziamo il "-U" opzione. Modifichiamo di nuovo il codice:

#! /Bin/Bash
Echo "Enter Number1"
Leggi il numero1
Echo "Enter Number2"
Leggi il numero2
if ["$ NUM1" -GT "$ NUMBER2"]
Poi
Echo "Number1 è maggiore di Number2"
Elif ["$ NUMBER1" -EQ "$ NUMBER2"]
Poi
Echo "Number1 è uguale a Number2"
altro
Echo "Number2 è maggiore di Number1"
fi

Nel primo "Se" Dichiarazione condizionale, ho ribattezzato il "numero 1" variabile a "Num1". Ora "Num1" è una variabile Unset. Ora esegui lo script:

$ bash -u b_script.sh

L'output ha identificato ed esplicitamente visualizza il nome di una variabile Unset.

Come eseguire il debug della parte specifica dello script bash:

La modalità Xtrace elabora ogni riga del codice e fornisce output. Tuttavia, trovare errori in un codice grande richiederebbe tempo se sappiamo già quale parte sta potenzialmente causando l'errore. Fortunatamente, Xtrace consente anche di eseguire il debug di una parte specifica del codice, che può essere realizzata usando il "impostato" comando. Posto "Set -x" All'inizio della parte che deve essere debug e poi "Set +X" alla fine. Ad esempio, voglio eseguire il debug delle dichiarazioni condizionali di “B_script.sh", Quindi racchiuderò tutte le dichiarazioni condizionali in "Set -x" E "Set +X" Opzioni come mostrato nel codice seguente:

#! /Bin/Bash
Echo "Enter Number1"
Leggi il numero1
Echo "Enter Number2"
Leggi il numero2
Set -x
if ["$ NUMER" -GT "$ NUMBER2"]
Poi
Echo "Number1 è maggiore di Number2"
Elif ["$ NUMBER1" -EQ "$ NUMBER2"]
Poi
Echo "Number1 è uguale a Number2"
altro
Echo "Number2 è maggiore di Number1"
fi
Set +x

Ora, esegui lo script usando “Bash B_Script.sh".

L'output sta solo eseguendo il debug delle condizioni IF come specificato.

Come eseguire il debug di uno script bash usando il comando "trap":

Se la tua sceneggiatura è complicata, allora ci sono anche più tecniche elaborative per il debug. Uno di questi è il "trappola" comando. IL "trappola" Il comando cattura i segnali ed esegue un comando quando si verifica una situazione specifica. Il comando può essere un segnale o una funzione. Ho creato un altro script con il nome di “Sum_script.sh":

#! /Bin/Bash
trap 'echo "riga $ lineno: il primo numero è $ numero1, il secondo numero è $ numera2 e la somma è $ sum"' debug
Echo "Inserisci il primo numero"
Leggi il numero1
Echo "Inserisci il secondo numero"
Leggi il numero2
Sum = $ [Number1 + Number2]
echo "La somma è $ somma"

IL "trappola" comando con "Debug" Visualizza il segnale lo stato delle variabili "numero 1", "numero 2" E "somma" Dopo l'esecuzione di ciascuna riga come mostrato nella seguente immagine di output:

I blocchi gialli sono spazi vuoti perché l'utente non ha ancora inserito alcun input; Questi spazi si riempiranno man mano che l'utente inserisce i valori. Questo metodo è anche molto utile nel debug di script bash.

Come eseguire il debug di uno script bash eliminando il file globbing usando l'opzione "-f":

File Globbing è un processo per trovare i file con caratteri jolly, i.e., "*" E "?". In molte situazioni, non è necessario espandere i file durante il debug. In tali casi, è possibile bloccare il file globbing utilizzando il "-F" opzione. Capiamolo con una sceneggiatura “Fglobe_script.sh":

#! /Bin/Bash
Echo "Visualizza tutti i file di testo."
ls *.TXT

Il codice sopra visualizzerà tutti i file di testo nella directory corrente, eseguire:

$ Bash fglobe_script.sh

Per disattivare il file globbing, usa il "-F" opzione:

$ bash -f fglobe_script.sh

Allo stesso modo, puoi usarlo con lo shebang e con il "impostato" anche comando:

#! /Bin/Bash
Echo "Visualizza tutti i file di testo."
ls *.TXT
Set -f
Echo "Visualizza tutti i file di testo"
ls *.TXT
Set +f

Ora, corri “Bash fglobe_script.sh":

La porzione chiusa "Set -f/set +f" Le opzioni non hanno elaborato i comandi con caratteri jolly.

Come combinare le opzioni di debug per debug Shell Script:

Usiamo solo un'opzione nelle tecniche di debug di sopra menzionate, ma possiamo combinare varie opzioni per una migliore comprensione. Implementamoci "-X" E "-V" opzioni per il “Sum_script.sh" sceneggiatura. Sto usando il “Sum_script.sh" sceneggiatura.

#! /Bin/Bash
Echo "Inserisci il primo numero"
Leggi il numero1
Echo "Inserisci il secondo numero"
Leggi il numero2
Sum = $ [Number1 + Number2]
echo "La somma è $ somma"

Ora eseguire:

$ bash -xv sum_script.sh

Entrambi "-X" E "-V" Le uscite sono combinate, come visualizzato nell'immagine di output. Allo stesso modo, possiamo anche combinare il "-U" Opzione con verbose "-v" per il rilevamento degli errori. Sto sostituendo il "numero 1" variabile con "Num" Nella sesta riga della sceneggiatura:

#! /Bin/Bash
è $ numero2 e la somma è $ somma "'debug
Echo "Inserisci il primo numero"
Leggi il numero1
Echo "Inserisci il secondo numero"
Leggi il numero2
Sum = $ [NUM + NUMBER2]
echo "La somma è $ somma"

Per visualizzare l'output, eseguire il comando di seguito:

$ Bash -uv sum_script.sh

Come reindirizzare il debug-Report a un file:

Salvare un rapporto di debug di uno script bash in un file può essere utile in molte situazioni. È un po 'complicato perché reindirizzare il debug-report in un file; Usiamo alcune variabili speciali. Implementlo “B_script.sh" codice:

#! /Bin/Bash
Exec 5> Dubug_Report.tronco d'albero
Bash_xtraced = "5"
PS4 = '$ LINENO--'
Echo "Enter Number1"
Leggi il numero1
Echo "Enter Number2"
Leggi il numero2
if ["$ NUMER" -GT "$ NUMBER2"]
Poi
Echo "Number1 è maggiore di Number2"
Elif ["$ NUMBER1" -EQ "$ NUMBER2"]
Poi
Echo "Number1 è uguale a Number2"
altro
Echo "Number2 è maggiore di Number1"
fi

Nella seconda riga del codice, si può vedere che stiamo reindirizzando l'output a a “Debug_report.tronco d'albero" file usando il "Exec" Comando con il descrittore di file 5 (FD5).

Exec 5> Debug_Report.tronco d'albero: IL "Exec" Il comando sta reindirizzando tutto ciò che sta accadendo nella shell in un file “Debug_report.tronco d'albero."

Bash_xtracefd = "5": È una particolare variabile di bash e non può essere utilizzata in nessun altro shell. Deve essere assegnato un descrittore di file valido e Bash scriverà l'output estratto “Debug_report.tronco d'albero."

PS4 = '$ LINENO- ': È anche una variabile bash utilizzata per stampare il numero di riga durante il debug utilizzando la modalità Xtrace. Il valore predefinito di PS4 è il "+" cartello

Lo script sopra sta generando un file di registro chiamato “Debug_report.tronco d'albero," Per leggerlo, usa il "gatto" comando:

Conclusione:

Un codice pieno di bug può influire sulle prestazioni del programma e dannoso anche per l'hardware. Il debug è molto cruciale per ogni programma poiché rende il programma più efficiente. Trovare errori esistenti e potenziali durante lo sviluppo di un programma può impedire al tuo programma di comportarsi inaspettatamente. I codici di grandi dimensioni richiedono di solito il debug attivo, migliorando l'efficacia del codice eliminando il ricorso che consumano pezzi di codice.

Molti linguaggi e ambienti di programmazione hanno i loro debugger di accompagnamento. In Bash Scripting, possono essere implementate varie tecniche per eseguire il debug dello script. Questa guida si è accuratamente focalizzata su tutti i metodi che possono essere utilizzati per trovare bug negli script bash. Quindi ogni volta che ritieni che la tua sceneggiatura di Bash non si comporti come previsto, usa una qualsiasi delle tecniche sopra menzionate, ma la modalità Xtrace (-x) è piuttosto utile nella maggior parte dei casi.