Syntaxfehler: Unerwartetes Dateiende – Bash-Skript [geschlossen]

Closed . Diese Frage benötigt Details oder Klarheit . Derzeit werden keine Antworten akzeptiert.

Kommentare

  • (0) Es wäre möglicherweise nützlicher gewesen, uns einen Unterschied zur letzten Version zu zeigen, die funktioniert hat. ………… Einige Beobachtungen (die sich wahrscheinlich nicht auf Ihr aktuelles, spezifisches Problem beziehen): (1) Ich kenne keinen Umstand, unter dem Sie ein ungehindertes ; (Semikolon) am Ende einer Zeile. Sie können die Semikolons an den Enden der Zeilen 157, 161, 165, 168 und 169 löschen. (Oder Sie können sie belassen; ich denke, es ist eine Frage des Stils.)… (Fortsetzung)
  • (Fortsetzung)… (2) Sie sollten immer Shell-Variablen zitieren, es sei denn, Sie haben einen guten Grund, dies nicht zu tun, und Sie sind sicher, dass Sie wissen, was Sie tun. Beispiel: "$1", "$2", "$SECONDS" und "$starttime". (3) Es ist einfacher, richtig eingerückten Code zu lesen und zu debuggen. (4) Warum setzen Sie FS und verwenden es dann nicht? (5) `…` kann geschrieben werden $(…). (6) $(($SECONDS - $starttime)) kann äquivalent geschrieben werden $((SECONDS - starttime)). Auch dies ist im Grunde eine Frage des Stils. (7) Warum drucken Sie "$words_read" in der Schleife, wenn Sie sie nicht in der Schleife ändern?
  • Hier ist ein Debugging-Ansatz: Versuchen Sie, die Zeilen 157- zu löschen. 174 und das Skript erneut ausführen. Wenn Sie immer noch den Fehler erhalten (wahrscheinlich in Zeile 157 oder 158 gemeldet), wissen Sie, dass das Problem nicht in den Zeilen 157-174 ist, und Sie müssen weiter zurückblicken (also wiederholen der Prozess, bis der Fehler verschwindet). … (Fortsetzung)
  • (Fortsetzung)… Wenn der Fehler behoben ist, fügen Sie die letzten Zeilen, die Sie gelöscht haben, wieder ein und beginnen Sie, sie zu entfernen. Wenn durch das Löschen der Zeilen 157-174 der Fehler behoben wird, fügen Sie sie wieder ein, und löschen Sie dann die Zeilen 159-160, 163-168 und 171-172. Versuchen Sie, die `grep …` durch eine Liste von Werten zu ersetzen. Verwenden Sie mit anderen Worten den Eliminierungsprozess.
  • Anmerkungen zu einigen Kommentaren von Scott ': (ad 2) wenn Sie sicher sind, was Sie tun dann (im veröffentlichten Code) muss nur "$1" zitiert werden (ad 4), wahrscheinlich meinte er IFS (und nicht FS)?

Antwort

Das unerwartete diagnostische Ende der Datei „ ist ein Hinweis darauf, dass Sie ein nicht übereinstimmendes oder nicht abgeschlossenes syntaktisches Eröffnungskonstrukt haben (if ohne fi, do ohne done, Klammern ohne die zugehörige schließende, öffnende, aber nicht abgeschlossene Anführungszeichen usw.). Die Zeilennummer, die auf das Ende des Skripts zeigt, ist in diesem Fall nicht hilfreich, außer zu sagen, dass Sie Ihre syntaktischen Konstrukte überprüfen müssen. Der Fehler kann irgendwo in Ihrem Code sein. Sie müssen dies überprüfen.

Kommentare

  • Vielen Dank für die Antwort. Ich habe den Fehler gefunden und behoben!
  • – Der Fehler kann sich irgendwo in Ihrem Code befinden. Es wurde ein Konto erstellt, um diesen Rat zu verbessern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.