Wie debuggen Sie ein Bash-Skript?

How Debug Bash Script




Jedes Programm muss fehlerfrei sein, bevor es die Verbraucher erreicht. Softwareentwickler versuchen ihr Bestes, um die Softwareprogramme fehlerfrei zu machen. Aber es ist schwierig, einen Code fehlerfrei zu machen, wenn es Tausende von Zeilen gibt. Das Debuggen ist ein fortlaufender Prozess; Es hilft dabei, Fehler sofort zu erkennen, wertvolle Informationen über Code zu sammeln und redundante Code-Blöcke zu eliminieren.

Alle Programmiersprachen haben einige gemeinsame und wenige unterschiedliche Ansätze, um Fehler zu finden. Beispielsweise können Debugging-Programme verwendet werden, um Fehler schnell zu beheben. Während Shell-Scripting kein spezielles Tool zum Debuggen des Codes hat. In diesem Artikel geht es darum, verschiedene Debugging-Techniken zu diskutieren, die verwendet werden können, um das Bash-Skript fehlerfrei zu machen. Bevor wir uns mit den Methoden befassen, wollen wir uns ein grundlegendes Verständnis von Shells und Shell-Skripting aneignen:







Was ist die Shell unter Linux?

Wenn Sie Ihren Computer starten, erhält der Kernel Informationen über die angeschlossene Hardware und ermöglicht die Interaktion anderer angeschlossener Komponenten. Außerdem verwaltet es Speicher, CPU und erkennt jedes neue Peripheriegerät. Alles in allem ist ein Kernel das Rückgrat eines jeden Betriebssystems. Aber haben Sie jemals daran gedacht, direkt mit dem Kernel zu interagieren und ihm zu befehlen, eine bestimmte Aufgabe auszuführen? Ist das überhaupt praktikabel? Absolut! Mit Hilfe einer Shell, einem Computerprogramm mit interaktiver Oberfläche, kann jeder den Kernel bedienen. Die Shell ermöglicht es Menschen, mit dem Kernel zu interagieren und ihn anzuweisen, jede Aufgabe auszuführen.



Unter Unix gibt es zwei Haupt-Shells Bourne-Schale und C-Schale . Beide Typen haben ihre Unterkategorien. Verschiedene Arten von Bourne-Muscheln sind Korn-Shell (ksh), Almquist-Shell (ash), Bourne Again-Shell (bash), und Z-Schale (zsh) . Gleichzeitig hat die C-Shell ihre eigenen Unterkategorien wie C-Shell (csh) und TENEX C-Schale (tcsh) . Wie oben erwähnt, aus allen Schalen, Bash (Bourne wieder Shell) ist die am weitesten verbreitete Shell und kommt aufgrund ihrer Effizienz und Benutzerfreundlichkeit in vielen Linux-Distributionen zum Einsatz.



Bash ist die Standard-Shell vieler Linux-Distributionen und wird von Millionen von Linux-Benutzern ausgiebig verwendet. Es ist so vielfältig und einflussreich, dass es jede Aufgabe ausführen kann, die Sie normalerweise in GUI-basierten Anwendungen ausführen. Sie können Dateien bearbeiten, Dateien verwalten, Fotos anzeigen, Musik hören, Videos abspielen und vieles mehr.





Was ist ein Shell-Skript:

Nachdem wir die Grundidee der Shell kennengelernt haben, gehen wir nun zum Shell-Skripting über. Das Shell-Skript ist ein Computerprogramm, das mehrere Befehle in einer Shell ausführt, die als Interpreter fungiert, um eine bestimmte Funktion auszuführen. Wie oben besprochen, gibt es 2 besondere Arten von Schalen. Dieser Leitfaden konzentriert sich jedoch auf die Bourne Again-Shell (Bash).
Was ist also ein Bash-Skript? Unter Linux werden alle Bash-Befehle in gespeichert /usr/bin und /bin Ordner. Wenn Sie beispielsweise einen Befehl ausführen, sucht die bash, ob er im Verzeichnis vorhanden ist oder nicht. Der Befehl wird ausgeführt, wenn er in den Verzeichnissen findet, sonst gibt es einen Fehler.

Wie wäre es mit einer Aufgabe, die mehrere Befehle benötigt, um im Terminal ausgeführt zu werden? In dieser speziellen Situation kann Ihnen Bash-Scripting helfen. Bash-Scripting ist eine Form von Shell-Scripting, mit der Sie Programme dazu bringen können, mehrere Bash-Befehle auszuführen, um eine bestimmte Aufgabe auszuführen.



Was sind Fehler beim Bash-Scripting:

Bei der Arbeit mit Bash-Scripting oder anderen Programmiersprachen treten viele Fehler auf. Ein Bug ist ein Fehler oder ein Fehler im Programm, der zu einem fehlerhaften Verhalten des Programms führen kann.

Jede Programmiersprache hat ihre eigene Prozedur, um Fehler zu finden; In ähnlicher Weise verfügt die Bash über viele eingebaute Optionen zum Debuggen eines Terminalprogramms.

Das Verwalten von Fehlern und das Debuggen eines Programms ist nicht weniger als ein Ärger. Dies ist eine zeitaufwendige Arbeit und kann sich verschlimmern, wenn Sie nicht über die richtigen Tools zum Debuggen Ihres Programms Bescheid wissen. Diese Zuschreibung ist eine vollständige Anleitung zum Debuggen von Bash-Skripten, um Ihr Skript fehlerfrei zu machen. Fangen wir also an:

So debuggen Sie ein Bash-Skript:

Wenn Sie an großen Programmierprojekten arbeiten, stoßen Sie auf viele Fehler oder Bugs. Das Debuggen eines Programms kann manchmal kompliziert sein. Programmierer verwenden normalerweise Debugging-Tools, und viele Code-Editoren helfen auch bei der Fehlersuche, indem sie die Syntax hervorheben.

Es gibt verschiedene Tools in Linux, um Codes zu debuggen, zum Beispiel GNU Debugger aka gdb. Tools wie GDB sind hilfreich für Programmiersprachen, die in Binärdateien kompilieren. Da Bash eine einfach interpretierte Sprache ist, sind keine schweren Tools erforderlich, um sie zu debuggen.

Es gibt verschiedene traditionelle Techniken, um einen Bash-Skriptcode zu debuggen, und eine davon ist das Hinzufügen Behauptungen. Assertions sind Bedingungen, die in den Programmen hinzugefügt werden, um bestimmte Bedingungen zu überprüfen und das Programm entsprechend auszuführen. Es ist eine defensive Technik, die auch beim Finden von Fehlern und beim Testen hilft. Du kannst viele finden Werkzeuge die beim Hinzufügen von Assertionen in Bash-Skripten helfen.

Nun, das Hinzufügen von Behauptungen ist eine der alten traditionellen Techniken. In der Bash stehen Sätze von Flags/Optionen zur Verfügung, um ein Bash-Skript zu debuggen. Diese Optionen können zusammen mit Shebang in den Skripten oder während der Ausführung des Programms im Terminal hinzugefügt werden. Nachfolgend sind die Themen aufgeführt, die wir aufgreifen werden:

  1. So debuggen Sie ein Bash-Skript durch Aktivieren ausführlich -v Möglichkeit
  2. So debuggen Sie ein Bash-Skript mit xtrace -x Möglichkeit
  3. So debuggen Sie ein Bash-Skript mit noexec -n Möglichkeit
  4. So identifizieren Sie die Variablen löschen beim Debuggen des Bash-Skripts
  5. So debuggen Sie die spezifischer Teil des Bash-Skripts
  6. So debuggen Sie ein Bash-Skript mit dem fangen Befehl
  7. So debuggen Sie ein Bash-Skript durch Eliminieren Dateiglobbing Verwendung der -F Möglichkeit
  8. Wie man kombinieren Debugging-Optionen zum Debuggen eines Shell-Skripts
  9. Wie man Debug-Bericht umleiten in eine Datei

Sehen wir uns also verschiedene Techniken in Bash an, um ein Bash-Skript zu debuggen:

1. So debuggen Sie ein Bash-Skript durch Aktivieren der ausführlichen Option -v:

Einer der einfachsten Ansätze zum Debuggen des Bash-Skripts ist die Verwendung des -v Option, auch als ausführlich bezeichnet. Die Option kann mit dem Shebang hinzugefügt oder während der Ausführung explizit mit dem Skriptdateinamen eingefügt werden. Die Option verbose wird jede Zeile des Codes als Prozess des Interpreters ausführen und ausgeben. Lassen Sie uns es mit einem Bash-Skriptbeispiel verstehen:

#! /bin/bash
rauswerfen 'Nummer1 eingeben'
lesenNummer 1
rauswerfen 'Nummer2 eingeben'
lesenNummer 2
wenn [ '$zahl1' -gt '$zahl2' ]
dann
rauswerfen 'Zahl1 ist größer als Zahl2'
elif [ '$zahl1' -eq '$zahl2' ]
dann
rauswerfen 'Zahl1 ist gleich Zahl2'
anders
rauswerfen 'Zahl2 ist größer als Zahl1'
Sein

Der obige Code ruft zwei Zahlen vom Benutzer ab und führt dann einige bedingte Anweisungen aus, um zu überprüfen, ob die Zahl signifikanter, kleiner oder gleich der anderen eingegebenen Zahl ist. Obwohl jeder Texteditor für das Bash-Skripting verwendet werden kann, verwende ich den Vim-Editor. Vim ist ein leistungsstarker Editor mit vielen Funktionen, der die Syntax von Bash-Skripten hervorhebt und die Wahrscheinlichkeit von Syntaxfehlern reduziert. Wenn Sie keinen Vim-Editor haben, rufen Sie ihn ab, indem Sie den unten genannten Befehl ausführen:

$sudogeeignetInstallieren ich kam

Erstellen Sie eine Bash-Skriptdatei mit:

$ich kamb_script.sh

Wenn Sie neu beim Vim-Editor sind, empfehle ich Ihnen, es zu lernen wie man den vim-editor benutzt bevor Sie fortfahren.

Nun zurück zum Skript, führen Sie das Skript aus, indem Sie verwenden -v Möglichkeit:

$bash -vb_script.sh

In der obigen Ausgabe ist zu sehen, dass jede Zeile des Skripts im Terminal gedruckt wird, während sie vom Interpreter verarbeitet wird. Beachten Sie, dass das Skript keine Eingaben vom Benutzer mehr entgegennimmt und dann die nächste Zeile des Skripts verarbeitet. Wie oben besprochen, dass die -v Option kann nach Shebang platziert werden, wie im Folgenden gezeigt:

#! / bin / bash -v

In ähnlicher Weise kann das Verbose-Flag auch in der nächsten Zeile von Shebang mit dem hinzugefügt werden einstellen Befehl:

#! /bin/bash
einstellen -v

Jede der oben beschriebenen Methoden kann ausführlich aktivieren.

2 So debuggen Sie ein Bash-Skript mit der Option xtrace -x:

Execution Trace, auch bekannt als xtrace, ist eine intelligente und nützliche Debugging-Option, insbesondere um logische Fehler zu verfolgen. Logische Fehler sind normalerweise mit Variablen und Befehlen verbunden. Um den Zustand der Variablen während der Ausführung des Skripts zu überprüfen, verwenden wir die -x Möglichkeit. Führen Sie jetzt noch einmal die b_script.sh Datei mit dem -x Flagge:

$bash -xb_script.sh

Die Ausgabe zeigt den Wert jeder Variablen während des Ausführungsprozesses explizit an. Wieder die -x kann neben dem Shebang und nach der Shebang-Zeile mit dem Befehl set verwendet werden. Der xtrace fügt das +-Zeichen in jede Zeile des Skripts ein.

3 So debuggen Sie ein Bash-Skript mit der Option noexec -n:

Syntaxfehler sind eine der Hauptursachen für Fehler. Um das Bash-Skript syntaktisch zu debuggen, verwenden wir noexec (keine Ausführung) Modus. Die für den noexec-Modus verwendete Option ist -n. Es werden nur die Syntaxfehler des Codes angezeigt, anstatt ihn auszuführen. Ein viel sicherer Ansatz zum Debuggen des Codes. Lass uns ausführen b_script.sh wieder mit dem -n Möglichkeit:

$bash -nb_script.sh

Wenn kein Syntaxfehler vorliegt, wird kein Code ausgeführt. Lassen Sie uns nun unseren Code ändern:

#! /bin/bash

rauswerfen 'Nummer1 eingeben'
lesenNummer 1
rauswerfen 'Nummer2 eingeben'
lesenNummer 2
wenn [ '$zahl1' -gt '$zahl2' ]
dann
rauswerfen 'Zahl1 ist größer als Zahl2'
elif [ '$zahl1' -eq '$zahl2' ]
#dann
rauswerfen 'Zahl1 ist gleich Zahl2'
anders
rauswerfen 'Zahl2 ist größer als Zahl1'
Sein

ich kommentiere dann nach elif . Jetzt mit -n ausführen b_script.sh Skript:

$bash -nb_script.sh

Wie erwartet, hat es den Fehler eindeutig identifiziert und im Terminal angezeigt.

4 So identifizieren Sie die nicht gesetzten Variablen beim Debuggen des Bash-Skripts:

Es ist üblich, beim Schreiben eines Codes einen Tippfehler zu machen. Häufig geben Sie eine Variable falsch ein, wodurch der Code nicht ausgeführt werden kann. Um einen solchen Fehler zu identifizieren, verwenden wir die -u Möglichkeit. Lassen Sie uns den Code noch einmal ändern:

#! /bin/bash
rauswerfen 'Nummer1 eingeben'
lesenNummer 1
rauswerfen 'Nummer2 eingeben'
lesenNummer 2
wenn [ '$num1' -gt '$zahl2' ]
dann
rauswerfen 'Zahl1 ist größer als Zahl2'
elif [ '$zahl1' -eq '$zahl2' ]
dann
rauswerfen 'Zahl1 ist gleich Zahl2'
anders
rauswerfen 'Zahl2 ist größer als Zahl1'
Sein

In der ersten wenn bedingte Anweisung, ich habe die umbenannt Nummer 1 variabel zu num1 . Jetzt num1 ist eine nicht gesetzte Variable. Führen Sie nun das Skript aus:

$bash -ub_script.sh

Die Ausgabe hat den Namen einer nicht gesetzten Variablen identifiziert und zeigt diesen explizit an.

5. So debuggen Sie den spezifischen Teil des Bash-Skripts:

Der xtrace-Modus verarbeitet jede Zeile des Codes und gibt eine Ausgabe aus. Das Auffinden von Fehlern in einem großen Code wäre jedoch zeitaufwändig, wenn wir bereits wissen, welcher Teil den Fehler möglicherweise verursacht. Glücklicherweise können Sie mit xtrace auch einen bestimmten Teil des Codes debuggen, was mit dem einstellen Befehl. Stelle setze -x am Anfang des Abschnitts, der debuggt werden muss und dann setze +x Am Ende. Zum Beispiel möchte ich die bedingten Anweisungen von debuggen b_script.sh , also werde ich alle bedingten Anweisungen in einschließen setze -x und setze +x Optionen wie im folgenden Code gezeigt:

#! /bin/bash
rauswerfen 'Nummer1 eingeben'
lesenNummer 1
rauswerfen 'Nummer2 eingeben'
lesenNummer 2
einstellen -x
wenn [ '$zahl' -gt '$zahl2' ]
dann
rauswerfen 'Zahl1 ist größer als Zahl2'
elif [ '$zahl1' -eq '$zahl2' ]
dann
rauswerfen 'Zahl1 ist gleich Zahl2'
anders
rauswerfen 'Zahl2 ist größer als Zahl1'
Sein
einstellen+ x

Führen Sie nun das Skript mit aus bash b_script.sh .

Die Ausgabe debuggt nur die if-Bedingungen wie angegeben.

6. So debuggen Sie ein Bash-Skript mit dem Trap-Befehl:

Wenn Ihr Skript kompliziert ist, gibt es auch ausführlichere Techniken zum Debuggen. Einer von ihnen ist der fangen Befehl. Die fangen Befehl fängt die Signale ab und führt einen Befehl aus, wenn eine bestimmte Situation eintritt. Der Befehl kann ein Signal oder eine Funktion sein. Ich habe ein weiteres Skript mit dem Namen erstellt sum_script.sh :

#! /bin/bash
fangen 'echo 'Zeile ${LINENO}: Erste Zahl ist $zahl1, zweite Zahl ist $zahl2 und Summe ist $summe' 'DEBUGGEN
rauswerfen 'Erste Zahl eingeben'
lesenNummer 1
rauswerfen 'Zweite Zahl eingeben'
lesenNummer 2
Summe= $[Zahl1 + Zahl2]
rauswerfen 'die Summe ist$summe'

Die fangen Befehl mit DEBUGGEN Signalanzeige den Status der Variablen Nummer 1 , Nummer 2 und Summe nach der Ausführung jeder Zeile, wie im folgenden Ausgabebild gezeigt:

Die gelben Blöcke sind Leerzeichen, da der Benutzer noch keine Eingaben gemacht hat; diese Felder füllen sich, wenn der Benutzer Werte eingibt. Diese Methode ist auch beim Debuggen von Bash-Skripten sehr hilfreich.

7. So debuggen Sie ein Bash-Skript, indem Sie Dateiglobbing mit der Option -f beseitigen:

Dateiglobbing ist ein Prozess zum Auffinden von Dateien mit Platzhalterzeichen, d. h. * und ? . In vielen Situationen müssen Sie beim Debuggen keine Dateien erweitern. In solchen Fällen können Sie das Dateiglobbing mit dem -F Möglichkeit. Lass es uns mit einem Skript verstehen fglobe_script.sh :

#! /bin/bash
rauswerfen 'Alle Textdateien anzeigen.'
ls *.TXT

Der obige Code zeigt alle Textdateien im aktuellen Verzeichnis an, führen Sie aus:

$bashfglobe_script.sh

Um das Globbing von Dateien zu deaktivieren, verwenden Sie die -F Möglichkeit:

$bash -Ffglobe_script.sh

Ebenso können Sie es mit dem Shebang und mit dem verwenden einstellen Befehl auch:

#! /bin/bash
rauswerfen 'Alle Textdateien anzeigen.'
ls *.TXT
einstellen -F
rauswerfen 'Alle Textdateien anzeigen'
ls *.TXT
einstellen+f

Jetzt lauf bash fglobe_script.sh:

Der von eingeschlossene Teil set -f/set +f Optionen verarbeiteten keine Befehle mit Platzhalterzeichen.

8. So kombinieren Sie Debugging-Optionen, um Shell-Skripte zu debuggen:

Wir verwenden bei den oben genannten Debugging-Techniken nur eine Option, können aber zum besseren Verständnis verschiedene Optionen kombinieren. Lass uns implementieren -x und -v Optionen zu den sum_script.sh Skript. Ich benutze die sum_script.sh Skript.

#! /bin/bash
rauswerfen 'Erste Zahl eingeben'
lesenNummer 1
rauswerfen 'Zweite Zahl eingeben'
lesenNummer 2
Summe= $[Zahl1 + Zahl2]
rauswerfen 'die Summe ist$summe'

Führen Sie nun aus:

$bash -xvsum_script.sh

Beide -x und -v Ausgaben werden kombiniert, wie im Ausgabebild angezeigt. Ebenso können wir auch die -u Option mit verbose -v zur Fehlererkennung. Ich ersetze die Nummer 1 variabel mit Auf eins in der sechsten Zeile des Skripts:

#! /bin/bash
ist$zahl2undSummeist$summe' ' DEBUG
rauswerfen '
Geben Sie die erste Zahl ein'
Zahl lesen1
rauswerfen '
Zweite Zahl eingeben'
Zahl lesen2
Summe=$[Zahl + Zahl2]
rauswerfen '
dasSummeist$summe'

Führen Sie den folgenden Befehl aus, um die Ausgabe anzuzeigen:

$bash -uvsum_script.sh

9. So leiten Sie den Debug-Bericht in eine Datei um:

Das Speichern eines Debug-Berichts eines Bash-Skripts in einer Datei kann in vielen Situationen praktisch sein. Es ist ein bisschen schwierig, den Debug-Bericht in eine Datei umzuleiten; Wir verwenden einige spezielle Variablen. Lass es uns implementieren auf b_script.sh Code:

#! /bin/bash
ausführender 5>dubug_report.log
BASH_XTRACED='5'
PS4='$LINENO--'
rauswerfen 'Nummer1 eingeben'
lesenNummer 1
rauswerfen 'Nummer2 eingeben'
lesenNummer 2
wenn [ '$zahl' -gt '$zahl2' ]
dann
rauswerfen 'Zahl1 ist größer als Zahl2'
elif [ '$zahl1' -eq '$zahl2' ]
dann
rauswerfen 'Zahl1 ist gleich Zahl2'
anders
rauswerfen 'Zahl2 ist größer als Zahl1'
Sein

In der zweiten Zeile des Codes ist zu sehen, dass wir die Ausgabe an a . umleiten debug_report.log Datei mit dem ausführender Befehl mit Dateideskriptor 5 (FD5).

exec 5> debug_report.log: Die ausführender Befehl leitet alles, was in der Shell passiert, in eine Datei um debug_report.log.

BASH_XTRACEFD=5: Es ist ein bestimmte Bash-Variable und kann in keiner anderen Shell verwendet werden. Es muss ein gültiger Dateideskriptor zugewiesen werden, und die Bash schreibt die extrahierte Ausgabe in debug_report.log.

PS4=’$LINENO– ‘: Es ist auch eine Bash-Variable, die verwendet wird, um die Zeilennummer beim Debuggen im xtrace-Modus auszugeben. Der Standardwert von PS4 ist das + Unterschrift

Das obige Skript generiert eine Protokolldatei namens debug_report.log, um es zu lesen, benutze das Katze Befehl:

Abschluss:

Ein Code voller Fehler kann die Leistung des Programms beeinträchtigen und auch schädlich für die Hardware sein. Debugging ist für jedes Programm sehr wichtig, da es das Programm effizienter macht. Das Auffinden vorhandener und potenzieller Fehler während der Entwicklung eines Programms kann ein unerwartetes Verhalten Ihres Programms verhindern. Große Codes erfordern in der Regel ein aktives Debugging, wodurch die Effektivität des Codes verbessert wird, indem die ressourcenintensiven Code-Blöcke eliminiert werden.

Viele Programmiersprachen und Umgebungen verfügen über eigene Debugger. Beim Bash-Skripting können verschiedene Techniken implementiert werden, um das Skript zu debuggen. Dieses Handbuch konzentrierte sich gründlich auf alle Methoden, die verwendet werden können, um Fehler in den Bash-Skripten zu finden. Wenn Sie also das Gefühl haben, dass sich Ihr Bash-Skript nicht wie erwartet verhält, verwenden Sie eine der oben genannten Techniken, aber der xtrace-Modus (-x) ist in den meisten Fällen ziemlich hilfreich.