Die Programmierung im Linux-Bash-Terminal hat sich zu einer gängigen Praxis in der Welt des Codings entwickelt. Softwareentwickler und Studierende, die sich mit Programmiersprachen beschäftigen, stoßen dabei oft auf verschiedene Fehlermeldungen. Wenn Sie wiederholt Fehlermeldungen wie „Syntaxfehler nahe unerwartetem Token ‚(‚“ oder „Bash-Syntaxfehler nahe unerwartetem Token“ gesehen haben, können Sie die in diesem Artikel beschriebenen Methoden ausprobieren, um Ihre Fähigkeiten im Programmieren zu verbessern. Lesen Sie die Methoden bitte in der angegebenen Reihenfolge durch und beheben Sie die Fehler in Ihren Befehlszeilen.
Behebung eines Bash-Syntaxfehlers in der Nähe eines unerwarteten Tokens
Die Linux-Bash ist ein Kommandozeileninterpreter für Linux-basierte Systeme und dient als Ersatz für die Bourne Shell (sh). Dateien im Linux-Bash-Skripting werden üblicherweise mit der Dateiendung „.sh“ versehen. Wenn es Formatierungsfehler im Code eines Shell-Skripts gibt, kann dies zu einem Syntaxfehler führen. Tritt dieser Fehler in der Nähe eines Zeichens ‚(‚ auf, gibt die Shell die entsprechende Zeile mit der Fehlermeldung zurück. Da Linux Bash ein Interpreter ist, wird nach dem Auffinden eines Fehlers die Ausführung des Skripts abgebrochen. Daher ist es wichtig, den Fehler in der betreffenden Zeile zu beheben und dann mit der nächsten Zeile fortzufahren. Im Folgenden werden einige häufige Ursachen für Syntaxfehler nahe eines unerwarteten Tokens in Linux Bash aufgeführt:
-
Probleme mit Escape-Sequenzen: Wenn in Bash-Skripten Escape-Sequenzen oder Anführungszeichen nicht korrekt verwendet werden, können diese Fehler verursachen. Achten Sie auf die richtige Formatierung von Escape-Sequenzen und Anführungszeichen.
-
Falsche Syntax im Code: Fehlerhafte Syntax, wie eine falsche Reihenfolge bei Schleifen oder Befehlen, kann Syntaxfehler verursachen.
-
Fehlerhafte Befehlsverwendung: Die falsche Anwendung von Befehlen, z.B. eine fehlerhafte Wertzuweisung, kann ebenfalls zu Syntaxfehlern führen.
-
Inkompatibles Betriebssystem: Inkompatibilitäten zwischen der Shell eines Unix-Systems und einem DOS-System können unerwartete Fehler auslösen.
-
Probleme beim Bash-Shell-Skript: Wenn Sie ein Shell-Skript verwenden, das von einem anderen System kopiert wurde, können Fehler auftreten.
Zur Veranschaulichung betrachten wir eine Datei namens „example.sh“, die im Linux-Bash-Skript mit folgenden Befehlszeilen erstellt wurde. Diese Beispieldatei soll potenzielle Syntaxfehler veranschaulichen und enthält verschiedene Befehle, die in Shell-Skripten verwendet werden können.
str= ‘First command line of ‘(example file)’ in the script’ str= [(1,2),(3,4)] if[ $day == “mon” ] then echo “mon” else echo “no mon” fi for VARIABLE in {0..2}; then do echo command1; echo command2; echo command3; echo command4; done while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “not mon”; done; fi
Methode 1: Manuelle Fehlerbehebung in jeder Befehlszeile
Eine Möglichkeit, Fehler zu beheben, ist die manuelle Korrektur jedes einzelnen Syntaxfehlers im Skript. Die einzelnen Schritte zur Behebung von Syntaxfehlern in der Nähe eines unerwarteten Tokens werden in diesem Abschnitt detailliert erläutert. Der Prozess zur Behebung von unerwarteten Token-Fehlern im Terminal wird wie folgt beschrieben: Führen Sie die Datei im Terminal mit dem Befehl „./example.sh“ aus und drücken Sie die Eingabetaste.
2. Achten Sie genau auf die Zeilen, die Fehlermeldungen bezüglich unerwarteter Token anzeigen.
3. Korrigieren Sie die Fehler in jeder Zeile gemäß den nachfolgenden Anweisungen und speichern Sie die Datei.
4. Führen Sie die geänderte Datei erneut aus, um zu überprüfen, ob der Syntaxfehler behoben wurde.
Schritt I: Dateiinhalte einlesen
Der erste Schritt zur Behebung von Syntaxfehlern in den Befehlszeilen ist das Einlesen der Datei im Terminal. Sollte es Probleme mit der Datei geben, ist es möglicherweise nicht möglich, diese korrekt anzuzeigen. Normalerweise verwendet man den Befehl „./example.sh“, um die Datei auszuführen, aber dabei kann der Inhalt nicht bearbeitet werden. Die nachfolgenden Optionen zeigen, wie Sie den Inhalt der Datei anzeigen und die Befehlszeilen zur Behebung von Syntaxfehlern in der Nähe des unerwarteten Tokens „(“ ändern können.
Option 1: Über den CAT-Befehl
Mit dem Befehl „cat“ kann der Inhalt der Datei im Shell-Skript angezeigt werden. Nutzen Sie den Befehl „cat -v example.sh“, um die Datei mit den unerwarteten Token-Fehlern einzulesen.
Hinweis 1: Die Datei „example.sh“ dient hier als Beispiel. Sie müssen den Namen Ihrer Datei verwenden, die den Fehler enthält.
Hinweis 2: Der Befehl „cat -v“ ist wichtig, da er alle unsichtbaren Zeichen, wie Zeilenumbrüche oder nicht-trennende Leerzeichen, anzeigt.
Option 2: Über den VX-Befehl
Falls Sie den „cat“-Befehl nicht verwenden können, können Sie alternativ den „vx“-Befehl nutzen, um die Befehle in der Datei anzuzeigen und zu bearbeiten. Geben Sie im Terminal den Befehl „sh -vx ./example.sh“ ein, um die Datei zu öffnen.
Option 3: Über den od -a Befehl
Falls die Befehlszeilen unsichtbare Zeichen enthalten, können Sie den Befehl „od -a“ verwenden, um die Datei anzuzeigen. Dieser Befehl kann besonders hilfreich sein, wenn die Inhalte der Datei im normalen Code-Editor nicht lesbar sind. Geben Sie „od -a example.sh“ ein, um die Datei anzuzeigen und gegebenenfalls Änderungen vorzunehmen.
Schritt II: Entfernen von Windows-Zeilenumbrüchen
Wenn ein Shell-Skript Windows-Zeilenumbrüche enthält, können Konsolenbefehle verwendet werden, um diese zu entfernen und die Codezeilen in eine neue Datei zu kopieren. Dies hilft bei der Fehlerbehebung.
Verwenden Sie den folgenden Befehl im Terminal, um den Inhalt der Datei in einer neuen Datei namens „correctedexample.sh“ zu speichern. Dadurch werden die Windows-Zeilenumbrüche entfernt:
tr –d ‘r’ <example.sh> correctedexample.sh
Schritt III: Berechtigungen für die neue Datei setzen
Um die Datei ausführen zu können, müssen Sie die Berechtigungen für die neu erstellte Datei setzen. Geben Sie den Befehl „chmod 755 correctedexample.sh“ im Terminal ein, um die entsprechenden Berechtigungen zu setzen und die Datei ausführen zu können. Sie können die korrigierte Datei dann anzeigen und Formatierungsfehler sowie den Syntaxfehler in der Nähe des unerwarteten Tokens „(“ beheben.
Schritt IV: Code in der Datei formatieren
Als nächstes müssen Sie die Codezeilen einzeln formatieren und ggf. manuell in der Datei ändern. Die folgenden Optionen erläutern, wie Sie die Datei formatieren können, um Syntaxfehler in der Nähe des unerwarteten Tokens „(“ zu beheben.
Option 1: Einfache Anführungszeichen durch doppelte Anführungszeichen ersetzen
Wenn Sie einfache Anführungszeichen in den Befehlszeilen verwenden, ersetzen Sie diese durch doppelte Anführungszeichen, um Syntaxfehler zu vermeiden. Entfernen Sie in der Datei „example.sh“ alle Codezeilen, die einfache Anführungszeichen (‚) enthalten und ersetzen Sie diese durch doppelte Anführungszeichen („). In der Beispieldatei sollte der Code wie folgt geändert werden: str = „Erste Befehlszeile von „(Beispieldatei)“ im Skript“.
Hinweis: Doppelte Anführungszeichen sind für Parameterbefehle notwendig, z.B. str= „[(1,2),(3,4)]“.
Option 2: Hinzufügen von „$“ zu Zeichenketten
Wenn Sie Zeichenkettenwerte zu einem Skript hinzufügen, müssen Sie diesen Werten ein $ voranstellen, um Syntaxfehler zu verhindern. Fügen Sie das $ vor den Zeichenkettenwerten hinzu, um unerwartete Fehler zu beheben. In der Beispieldatei sollte die Befehlszeile wie folgt angepasst werden:
str= $ ‘First command line of ‘(example file)’ in the script’
Hinweis: Die Verwendung des $ Zeichens ermöglicht es, die Escape-Sequenzen zu umgehen, da die Befehlszeilen gemäß ANSI-C-Standard dekodiert werden. Das bedeutet, dass man durch die Verwendung des $-Zeichens für Zeichenkettenwerte, die Verwendung von doppelten Anführungszeichen anstelle von einfachen Anführungszeichen vermeiden kann.
Option 3: Tabulatoren in Leerzeichen umwandeln
Die Leerräume zwischen zwei Anweisungen im Befehl müssen als Leerzeichen und nicht als Tabulatoren formatiert sein, um Syntaxfehler im Skript zu vermeiden. Wenn der Fehler auf Cygwin auftritt, wandeln Sie Tabulatoren im Code in Leerzeichen um. Die Befehlszeile sieht wie folgt aus:
do echo command1; echo command2; echo command3; echo command4; done
Der obige Befehl sollte wie folgt umgeschrieben werden, um den Fehler zu beheben:
do echo command1; echo command2; echo command3; echo command4; done
Option 4: Escape-Zeichen verwenden
Wenn Sie ein Bash-spezifisches Zeichen in Ihrem Code verwenden, ist es wichtig, ein Escape-Zeichen vor das jeweilige Zeichen zu setzen, um Syntaxfehler zu vermeiden. Klammern () sind solche Sonderzeichen in Bash. Um die Klammern als normale Zeichen zu verwenden, benötigen Sie einen Backslash (\) als Escape-Zeichen vor der Klammer. Der Befehl str= ‘First command line of ‘(example file)’ in the script’ wird keinen Fehler im Terminal ausgeben, da ein Escape-Zeichen verwendet wurde.
Option 5: Leerzeichen zwischen Zeichen nutzen
Das Shell-Skript erkennt Befehle und Anweisungen anhand definierter Regeln. Stellen Sie sicher, dass Leerzeichen zwischen den Zeichen korrekt verwendet werden, damit die Shell den Befehl identifizieren kann. Ein Leerzeichen dient dazu, zwei Zeichen in der Befehlszeile voneinander zu trennen. Im vorliegenden Code existiert kein Leerzeichen zwischen „if“ und „[„, wodurch ein Fehler mit einem unerwarteten Token ausgelöst wird. Die Shell erkennt den Befehl „if[“ nicht. Ändert man den Code in „if [ $day == „mon“ ];“, dann kann der Fehler behoben werden, da die Shell den Befehl nun als gültigen Befehl erkennt.
Option 6: Befehls-Trennzeichen für Anweisungen verwenden
Die einzelnen Befehle im Shell-Skript müssen durch Trennzeichen voneinander abgegrenzt werden, damit das Terminal die einzelnen Befehle erkennen kann. Zur Behebung von Syntaxfehlern in Linux Bash benötigen Sie hierfür Befehls-Trennzeichen. Dafür kann man ein Semikolon (;) oder einen Zeilenumbruch (durch Drücken der Eingabetaste) verwenden. Der Befehl „if [ $day == „mon“ ] then“ muss z.B. in „[ $day == „mon“ ]; then“ geändert werden. Da das Semikolon als Trennzeichen zwischen den Zeichen [ und then fungiert, kann dieser Fehler behoben werden.
Option 7: Zusätzliche Anweisungen entfernen
Es kann vorkommen, dass zusätzliche Anweisungen im Code sind, oder dass der Code durch verschachtelte Schleifen durcheinandergebracht wurde. Entfernen Sie diese zusätzlichen Anweisungen in den Codezeilen, um den Syntaxfehler in der Nähe eines unerwarteten Tokens „(“ in der Linux-Bash zu beheben. Bash-Schleifen (for…done) oder Konstrukte (if…fi) müssen eine korrekte Syntax aufweisen. Die Beispiel-Datei hat eine falsche Syntax in der for-Schleife mit dem Wort then, welches normalerweise bei if-Anweisungen verwendet wird. Durch die folgende Änderung des Codes wird der Fehler behoben, da „then“ eine zusätzliche Anweisung ist:
for VARIABLE in {0..2}; do echo command1; echo command2; echo command3; echo command4; done
Option 8: Richtige Reihenfolge beim Schließen von Anweisungen sicherstellen
Wenn Sie viele verschachtelte oder bedingte Konstrukte in Ihrem Shell-Skript verwenden, achten Sie darauf, dass die Schleifen in der richtigen Reihenfolge geschlossen werden, in der sie geöffnet wurden. Sie können einen Zeilenumbruch verwenden, um Konflikte mit den Schleifen zu vermeiden. Die Reihenfolge des Schließens von verschachtelten Schleifen und bedingten Anweisungen muss korrekt sein und darf nicht verändert werden. Die Schleifen im Code „while true; do if [ $day == „mon“ ]; then echo „mon“; else echo „not mon“; done; fi“ müssen in der richtigen Reihenfolge geschlossen werden. Durch die Anpassung des Codes wie unten gezeigt kann der Fehler behoben werden:
while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “not mon”; fi; done
Methode 2: Code umschreiben
Wenn Sie den Code kopiert und in eine neue Datei im Terminal eingefügt haben, können Sie versuchen, den Code manuell neu zu schreiben, um den Fehler zu beheben. Wenn Sie den Code ohne Formatierungsfehler im Shell-Skript erstellen, werden die Fehler im Code behoben. Dies liegt daran, dass versteckte Zeichen und Formatierungsprobleme im Texteditor, wie Microsoft Word, den Fehler beim Kopieren und Einfügen verursacht haben können.
Methode 3: Verwenden Sie den Befehl dos2unix.exe
Wenn Sie ein Unix-basiertes Betriebssystem verwenden, verwenden Sie zur Trennung von Zeilen in der Datei ein Zeilenumbruchzeichen (n). Wenn Sie jedoch ein Windows-Betriebssystem nutzen, benötigen Sie für einen Zeilenumbruch einen Wagenrücklauf und einen Zeilenvorschub (rn). Wenn der in einem Windows-Betriebssystem erstellte Code in Cygwin ausgeführt wird, kann es zu Syntaxfehlern mit unerwarteten Token „(“ kommen.
Um diesen Fehler zu beheben, müssen die Wagenrücklaufzeichen mithilfe des Kommandozeilentools dos2unix.exe entfernt werden. Mit dem Befehl „dos2unix.exe example.sh“ im Terminal können Sie die Datei in ein Unix-kompatibles Format umwandeln.
***
In diesem Artikel wurden verschiedene Methoden zur Behebung von Bash-Syntaxfehlern in der Nähe von unerwarteten Token „(“ beschrieben. Wenn Sie mit Linux Bash arbeiten, können Sie diese Methoden nutzen, um Syntaxfehler zu beheben. Wir hoffen, dass Ihnen dieser Artikel geholfen hat. Bei Fragen oder Anregungen freuen wir uns auf Ihren Kommentar.