Wie man ein Bash -Skript debuggiert?

Wie man ein Bash -Skript debuggiert?

Jedes Programm muss frei von Fehlern 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. Debugging ist ein fortlaufender Prozess. Es hilft beim sofort Erkennen von Fehlern, beim Sammeln wertvoller Informationen über Code und die Beseitigung redundanter Codebrocken.

Alle Programmiersprachen haben einige gemeinsame und wenige unterschiedliche Ansätze, um Fehler zu finden. Zum Beispiel können Debugging -Programme verwendet werden, um Fehler schnell zu entfernen. Während das Shell -Skripting kein bestimmtes Tool zum Debuggen des Codes hat. In diesem Artikel geht es darum, verschiedene Debugging-Techniken zu diskutieren, mit denen das Bash-Skript fehlerfrei ist. Bevor wir uns mit den Methoden eintauchen, lassen Sie uns ein grundlegendes Verständnis von Shells und Shell -Skripten haben:

Was ist die Schale unter Linux??

Wenn Sie Ihren Computer starten. Abgesehen davon verwaltet es Speicher, CPU und erkennt alle neuen Peripheriegeräte. Alles in allem ist ein Kernel das Rückgrat eines jeden Betriebssystems. Aber haben Sie jemals daran gedacht, direkt mit dem Kernel zu interagieren, befehlen, eine bestimmte Aufgabe auszuführen? Ist es überhaupt praktikabel, das zu tun?? Absolut! Mit Hilfe einer Shell, einem Computerprogramm mit einer interaktiven Schnittstelle, kann jeder den Kernel bedienen. Die Schale ermöglicht es dem Menschen, mit dem Kernel zu interagieren und sie anzuweisen, jede Aufgabe auszuführen.

In Unix gibt es zwei Hauptschalen Bourne Shell Und C Shell. Beide Typen haben ihre Unterkategorien. Verschiedene Arten von Bourne Shells sind Korn Shell (KSH), Almquist Shell (Asche), Bourne Again Shell (Bash), Und Z Shell (ZSH). Gleichzeitig hat die C Shell ihre eigenen Unterkategorien wie C Shell (CSH) Und Tenex C Shell (TCSH). Wie oben erwähnt, aus allen Muscheln, Bash (Bourne Again Shell) ist die am häufigsten verwendete Shell und kommt aufgrund seiner Effizienz und Benutzerfreundlichkeit in vielen Linux-Verteilungen aus dem Box.

Bash ist die Standardhülle vieler Linux -Verteilungen und wird von Millionen von Linux -Benutzern ausführlich 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:

Wenn wir die Grundidee von Shell gelernt haben, gehen wir jetzt zu Shell Scripting. 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 erläutert, gibt es 2 bestimmte Arten von Shells. Dieser Leitfaden konzentriert sich jedoch auf die Bourne erneut Shell (Bash).
Was ist also ein Bash -Skript?? In Linux werden alle Bash -Befehle in gespeichert "/Usr/bin" und "/bin" Ordner. Wenn Sie beispielsweise einen Befehl ausführen, suchen Sie nach, wenn er im Verzeichnis vorliegt oder nicht. Der Befehl wird ausgeführt, wenn er in den Verzeichnissen sonst einen Fehler gibt.

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

Was sind Fehler im Bash -Skript:

Während der Arbeit mit Bash -Skripten oder mit anderen Programmiersprachen begegnen Sie auf viele Fehler. Ein Fehler ist ein Fehler oder ein Fehler im Programm, der dazu führen kann, dass sich das Programm falsch verhält.

Jede Programmiersprache hat ihre eigene Prozedur, um Fehler zu finden. In ähnlicher Weise verfügt Bash auch viele Einbauoptionen, um ein Terminalprogramm zu debuggen.

Das Verwalten von Fehlern und das Debuggen eines Programms ist nicht weniger als ein Ärger. Es ist ein zeitaufwändiger Job und kann sich verschlechtern, wenn Sie sich der richtigen Tools nicht bewusst sind, um Ihr Programm zu debuggen. Diese Beschreibung ist eine vollständige Anleitung zum Debuggen von Bash-Scripts, um Ihr Skript fehlerfrei zu machen. Beginnen wir also:

So debuggen Sie ein Bash -Skript:

Wenn Sie an großen Programmierprojekten arbeiten, begegnen Sie auf viele Fehler oder Fehler. Das Debuggen eines Programms kann manchmal kompliziert sein. Programmierer verwenden in der Regel Debugging -Tools, und viele Code -Editoren unterstützen auch das Erkenntnis des Fehlers, indem es die Syntax hervorhebt.

Es gibt verschiedene Tools unter Linux, um Codes zu debuggen, beispielsweise GNU Debugger alias “GDB.„Tools wie GDB sind hilfreich für Programmiersprachen, die in Binärdateien zusammenstellen. Da Bash eine einfache interpretierte Sprache ist, müssen keine schweren Werkzeuge debuggen, um sie zu debuggen.

Es gibt verschiedene traditionelle Techniken, um einen Bash -Scripting -Code zu debuggen, und einer von ihnen fügt hinzu „Behauptungen.” Behauptungen sind Bedingungen, die in den Programmen hinzugefügt werden, um bestimmte Bedingungen zu überprüfen und das Programm entsprechend auszuführen. Es ist eine Defensivtechnik, die auch beim Finden von Fehlern und Tests hilft. Sie können viele Tools finden, die beim Hinzufügen von Behauptungen in Bash -Skripten helfen.

Das Hinzufügen von Behauptungen ist eine der alten traditionellen Techniken. In Bash sind Sätze von Flags/Optionen verfügbar, um ein Bash -Skript zu debuggen. Diese Optionen können zusammen mit Shebang in den Skripten hinzugefügt werden oder bei der Ausführung des Programms im Terminal hinzugefügt werden. Die Themen, die wir aufnehmen werden, sind unten aufgeführt:

  1. So debuggen Sie das Bash -Skript durch Aktivieren ausführlich "-v" Möglichkeit
  2. So debuggen Sie das Bash -Skript mithilfe Xtrace "-x" Möglichkeit
  3. So debuggen Sie das Bash -Skript mithilfe noexec "-n" Möglichkeit
  4. Wie man die identifiziert Nicht festgelegte Variablen Beim Debuggen des Bash -Skripts
  5. Wie man die debuggiert spezifischer Teil des Bash -Skripts
  6. So debuggen Sie ein Bash -Skript mit dem "fangen" Befehl
  7. So debuggen Sie ein Bash -Skript, indem Sie eliminieren Dateikugel Verwendung der "-F" Möglichkeit
  8. Wie man kombinieren Debugging -Optionen zum Debuggen eines Shell -Skripts
  9. Wie man Debug-Bericht umleiten zu einer Datei

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

So debuggen Sie das Bash-Skript, indem Sie die ausführliche Option „-v“ aktivieren:

Einer der einfachsten Ansätze, um das Bash -Skript zu debuggen "-V" Option, auch als ausführlich bekannt. Die Option kann mit dem Shebang hinzugefügt oder explizit mit dem Skriptdateinamen eingesetzt werden. Die ausführliche Option wird jede Zeile des Codes als Vorgang durch den Interpreter ausführen und drucken. Verstehen wir es mit einem Bash -Skript -Beispiel:

#! /Bin/Bash
Echo "Number eingeben1" eingeben "
Lesen Sie Nummer1
Echo "Number 2 eingeben"
Lesen Sie Nummer2
Wenn ["$ number1" -Gt "$ number2"]
Dann
Echo "Nummer1 ist größer als Nummer2"
ELIF ["$ number1" -Eq "$ number2"]
Dann
Echo "Nummer1 entspricht der Nummer2"
anders
Echo "Nummer2 ist größer als Nummer1"
fi

Der obige Code erhält zwei Zahlen vom Benutzer und führt dann einige bedingte Anweisungen aus, um zu überprüfen. Obwohl jeder Texteditor zum Bash -Scripting verwendet werden kann, verwende ich VIM -Editor. Vim ist ein leistungsstarker, featurereicher Editor, der die Syntax von Bash-Skripten hervorhebt und die Chancen von Syntaxfehlern verringert. Wenn Sie keinen VIM -Editor haben, erhalten Sie ihn, indem Sie den unten genannten Befehl ausführen:

$ sudo apt install Vim

Erstellen Sie eine Bash -Skriptdatei mit:

$ vim b_script.Sch

Wenn Sie bei VIM -Editor neu sind, empfehle ich Ihnen zu lernen, wie Sie den VIM -Editor verwenden, bevor Sie fortfahren.

Führen Sie nun das Skript mithilfe des Skripts durch "-V" Möglichkeit:

$ bash -v b_script.Sch

Es ist in der obigen Ausgabe zu sehen, dass jede Zeile des Skripts im Terminal gedruckt wird, wenn sie vom Interpreter verarbeitet. Beachten Sie, dass das Skript keine Eingaben vom Benutzer abnimmt und dann die nächste Zeile des Skripts verarbeitet. Wie oben erläutert, dass die "-V" Die Option kann nach Shebang platziert werden, wie im Folgenden gezeigt:

#! /bin/bash -v

In ähnlicher Weise kann die ausführliche Flagge auch in der nächsten Zeile von Shebang mit dem hinzugefügt werden "Satz" Befehl:

#! /Bin/Bash
set -v

Eine der oben diskutierten Methoden kann ausführlich ermöglichen.

2 So debuggen Sie das Bash-Skript mithilfe der Xtrace "-x" -Option:

Ausführungsverfolgung, auch als Xtrace bekannt. Logische Fehler werden normalerweise Variablen und Befehlen zugeordnet. Um den Stand der Variablen während der Ausführung des Skripts zu überprüfen, verwenden wir die "-X" Möglichkeit. Führen Sie jetzt wieder die “B_Script.Sch" Datei mit der "-X" Flagge:

$ bash -x b_script.Sch

Die Ausgabe zeigt explizit den Wert jeder Variablen während des Ausführungsprozesses. Wieder das "-X" kann neben dem Shebang und nach der Shebang -Linie mit dem SET -Befehl verwendet werden. Der XTrace setzt das Zeichen "+" mit jeder Zeile des Skripts.

3 So debuggen Sie das Bash-Skript mit NOExec "-n" -Option:

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 wird nur die Syntaxfehler des Code angezeigt, anstatt ihn auszuführen. Ein viel sicherer Ansatz zur Debugie des Codes. Lassen Sie uns ausführen “B_Script.Sch" wieder mit dem "-N" Möglichkeit:

$ bash -n b_script.Sch

Es wird keine Codeausführung geben, wenn kein Syntaxfehler vorliegt. Lassen Sie uns nun unseren Code ändern:

#! /Bin/Bash
Echo "Number eingeben1" eingeben "
Lesen Sie Nummer1
Echo "Number 2 eingeben"
Lesen Sie Nummer2
Wenn ["$ number1" -Gt "$ number2"]
Dann
Echo "Nummer1 ist größer als Nummer2"
ELIF ["$ number1" -Eq "$ number2"]
#Dann
Echo "Nummer1 entspricht der Nummer2"
anders
Echo "Nummer2 ist größer als Nummer1"
fi

Ich kommentiere "Dann" nach "Elif". Jetzt mit "-n" ausgeführt “B_Script.Sch" Skript:

$ bash -n b_script.Sch

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

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

Ein Tippfehler beim Schreiben eines Codes zu machen ist üblich. Oft beschlagen Sie eine Variable, die den Code nicht ausführen lässt. Um einen solchen Fehler zu identifizieren, verwenden wir die "-U" Möglichkeit. Ändern wir den Code erneut:

#! /Bin/Bash
Echo "Number eingeben1" eingeben "
Lesen Sie Nummer1
Echo "Number 2 eingeben"
Lesen Sie Nummer2
Wenn ["$ num1" -Gt "$ number2"]
Dann
Echo "Nummer1 ist größer als Nummer2"
ELIF ["$ number1" -Eq "$ number2"]
Dann
Echo "Nummer1 entspricht der Nummer2"
anders
Echo "Nummer2 ist größer als Nummer1"
fi

In der ersten "Wenn" bedingte Aussage, ich habe die umbenannt "Nummer 1" variabel zu "Num1". Jetzt "Num1" ist eine unbegründete Variable. Führen Sie nun das Skript aus:

$ bash -u b_script.Sch

Die Ausgabe hat den Namen einer nicht festgelegten Variablen identifiziert und explizit angezeigt.

So debuggen Sie den spezifischen Teil des Bash -Skripts aus:

Der Xtrace -Modus verarbeitet jede Zeile des Codes und gibt Ausgabe an. Das Finden von Fehlern in einem großen Code wäre jedoch zeitaufwändig, wenn wir bereits wissen, welcher Teil möglicherweise den Fehler verursacht. Zum Glück können Sie mit Xtrace auch einen bestimmten Teil des Codes debuggen, der mit dem erreicht werden kann "Satz" Befehl. Ort "Set -x" zu Beginn des Teils, der debugged und dann debuggiert werden muss "Set +x" Am Ende. Zum Beispiel möchte ich die bedingten Aussagen von debuggen “B_Script.Sch", Also werde ich alle bedingten Aussagen in einschließen "Set -x" Und "Set +x" Optionen wie im folgenden Code gezeigt:

#! /Bin/Bash
Echo "Number eingeben1" eingeben "
Lesen Sie Nummer1
Echo "Number 2 eingeben"
Lesen Sie Nummer2
set -x
Wenn ["$ number" -Gt "$ number2"]
Dann
Echo "Nummer1 ist größer als Nummer2"
ELIF ["$ number1" -Eq "$ number2"]
Dann
Echo "Nummer1 entspricht der Nummer2"
anders
Echo "Nummer2 ist größer als Nummer1"
fi
Set +x

Führen Sie nun das Skript mit verwenden „Bash B_Script.Sch".

Die Ausgabe debuggiert nur die IF -Bedingungen wie angegeben.

So debuggen Sie ein Bash -Skript mit dem Befehl „Trap“:

Wenn Ihr Skript kompliziert ist, gibt es auch ausführliche Techniken zum Debuggen. Einer von ihnen ist der "fangen" Befehl. Der "fangen" Der Befehl fängt die Signale an und führt einen Befehl aus, wenn eine bestimmte Situation auftritt. Der Befehl kann ein Signal oder eine Funktion sein. Ich habe ein anderes Skript mit dem Namen von erstellt “Sum_script.Sch":

#! /Bin/Bash
Trap 'echo "Zeile $ lineno: Erste Nummer ist $ Nummer1, die zweite Nummer ist $ Number2 und Summe ist $ sum"' Debugg
Echo "Erste Nummer eingeben"
Lesen Sie Nummer1
Echo "Zweite Nummer eingeben"
Lesen Sie Nummer2
sum = $ [number1 + number2]
echo "Die Summe ist $ sum"

Der "fangen" Befehl mit "DEBUGGEN" Signal Zeigen Sie den Status der Variablen an "Nummer 1", "Nummer 2" Und "Summe" Nach der Ausführung jeder Zeile wie im folgenden Ausgangsbild gezeigt:

Die gelben Blöcke sind leere Räume, da der Benutzer noch keine Eingabe eingegeben hat. Diese Räume füllen sich, wenn der Benutzer Werte eingibt. Diese Methode ist auch sehr hilfreich beim Debuggen von Bash -Skripten.

So debuggen Sie ein Bash-Skript, indem Sie die Dateikugel mithilfe der Option "-F" eliminieren:

Dateikugel ist ein Prozess, in dem die Dateien mit Wildcard -Zeichen gefunden werden, ich.e., "*" Und “?”. In vielen Situationen müssen Sie beim Debuggen keine Dateien erweitern. In solchen Fällen können Sie die Dateikugel mit dem blockieren "-F" Möglichkeit. Verstehen wir es mit einem Skript “FGlobe_Script.Sch":

#! /Bin/Bash
Echo "Alle Textdateien anzeigen."
ls *.txt

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

$ bash fGlobe_Script.Sch

Verwenden Sie die Dateikugel, um die Dateikugel auszuschalten "-F" Möglichkeit:

$ bash -f fglobe_script.Sch

In ähnlicher Weise können Sie es mit dem Shebang und dem verwenden "Satz" Befehl auch:

#! /Bin/Bash
Echo "Alle Textdateien anzeigen."
ls *.txt
SET -F
Echo "Alle Textdateien anzeigen" angeben
ls *.txt
Set +f

Jetzt renn „Bash fGlobe_Script.Sch":

Der Teil mit umschlossen "Set -f/set +f" Die Optionen verarbeiteten keine Befehle mit Wildcard -Charakteren.

So kombinieren Sie Debugging -Optionen zum Debuggen von Shell -Skript:

Wir verwenden nur eine Option in den oben genannten Debugging-Techniken, können jedoch verschiedene Optionen für ein besseres Verständnis kombinieren. Lassen Sie uns implementieren "-X" Und "-V" Optionen zum “Sum_script.Sch" Skript. Ich benutze die “Sum_script.Sch" Skript.

#! /Bin/Bash
Echo "Erste Nummer eingeben"
Lesen Sie Nummer1
Echo "Zweite Nummer eingeben"
Lesen Sie Nummer2
sum = $ [number1 + number2]
echo "Die Summe ist $ sum"

Jetzt führen Sie aus:

$ bash -xv sum_script.Sch

Beide "-X" Und "-V" Ausgänge werden kombiniert, wie im Ausgangsbild angezeigt. In ähnlicher Weise können wir auch das kombinieren "-U" Option mit ausführlicher "-v" zur Fehlererkennung. Ich ersetze das "Nummer 1" Variable mit "Num" In der sechsten Zeile des Skripts:

#! /Bin/Bash
IS $ Number2 und Summe ist $ sum "Debuggen
Echo "Erste Nummer eingeben"
Lesen Sie Nummer1
Echo "Zweite Nummer eingeben"
Lesen Sie Nummer2
sum = $ [num + number2]
echo "Die Summe ist $ sum"

Führen Sie den unten erwähnten Befehl aus, um die Ausgabe anzuzeigen:

$ bash -uv sum_script.Sch

So umleiten Sie Debugg-Report zu einer Datei:

Das Speichern eines Debug -Berichts über ein Bash -Skript in einer Datei kann in vielen Situationen praktisch sein. Es ist etwas schwierig, weil Debugug-Berichterstattung in eine Datei umleiten kann. Wir verwenden einige spezielle Variablen. Lassen Sie es uns umsetzen “B_Script.Sch" Code:

#! /Bin/Bash
Exec 5> Dubug_Report.Protokoll
Bash_xtrace = "5"
PS4 = '$ lineno--'
Echo "Number eingeben1" eingeben "
Lesen Sie Nummer1
Echo "Number 2 eingeben"
Lesen Sie Nummer2
Wenn ["$ number" -Gt "$ number2"]
Dann
Echo "Nummer1 ist größer als Nummer2"
ELIF ["$ number1" -Eq "$ number2"]
Dann
Echo "Nummer1 entspricht der Nummer2"
anders
Echo "Nummer2 ist größer als Nummer1"
fi

In der zweiten Zeile des Codes ist ersichtlich, dass wir die Ausgabe zu a umleiten “Debug_report.Protokoll" Datei mit dem "Exec" Befehl mit Dateideskriptor 5 (FD5).

EXEC 5> DEBUG_REPORT.Protokoll: Der "Exec" Der Befehl leitet alles um, was in der Shell zu einer Datei passiert “Debug_report.Protokoll.”

Bash_xtracefd = ”5”: Es ist eine bestimmte Bash -Variable und kann in keiner anderen Schale verwendet werden. Es muss ein gültiger Dateideskriptor zugewiesen werden, und Bash schreibt die extrahierte Ausgabe auf “Debug_report.Protokoll.”

PS4 = '$ LINENO- ': Es handelt sich auch um eine Bash -Variable. Der Standardwert von PS4 ist das "+" Zeichen

Das obige Skript generiert eine Protokolldatei mit dem Namen “Debug_report.Protokoll," Verwenden Sie das Lesen, um das zu lesen "Katze" Befehl:

Abschluss:

Ein Code voller Fehler kann die Leistung des Programms beeinflussen und auch für die Hardware schädlich. Debugging ist für jedes Programm sehr wichtig, da es das Programm effizienter macht. Das Finden vorhandener und potenzieller Fehler während der Entwicklung eines Programms kann verhindern, dass Ihr Programm unerwartet verhalten wird. Große Codes erfordern normalerweise ein aktives Debugging, wodurch die Effektivität des Codes verbessert wird, indem der Rückgriff auf den konsumierenden Codebrocken beseitigt wird.

Viele Programmiersprachen und Umgebungen haben ihre eigenen Begleitdebugger. In Bash Scripting können verschiedene Techniken implementiert werden, um das Skript zu debuggen. Dieser Leitfaden konzentrierte sich gründlich auf alle Methoden, mit denen Fehler in den Bash -Skripten gefunden werden können. 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.