syntax error: unexpected end of file - Wieso?

Hinweis: In dem Thema syntax error: unexpected end of file - Wieso? gibt es 9 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Hallo,


    ich verusche gerade einen Script zu schreiben, der in einem Cronjob verwendet werden soll. Leider wird mir beim Ausführen des Scriptes folgende Meldung ausgegeben:


    "line 25: syntax error: unexpected end of file"


    Der Script schaut so aus:

    Einmal editiert, zuletzt von tux93 () aus folgendem Grund: Code-Tags eingefügt

    Für den Inhalt des Beitrages 139590 haftet ausdrücklich der jeweilige Autor: mediamarc

  • "line 25: syntax error: unexpected end of file"

    Du hättest ja die Zeilennummern mit angeben können.
    Ist das die Zeile #25, die mit gzip $datei?


    Stelle mal den Cursor im Editor bis ganz nach unten, letzte Zeile und letztes Zeichen.
    Steht er dann hinter dem i der Variablen $datei?
    Wenn ja, Enter drücken um einen Zeilenumbruch zu bekommen. Abspeichern und testen.
    Wenn nein, habe ich auch keine Idee.

    Für den Inhalt des Beitrages 139598 haftet ausdrücklich der jeweilige Autor: ThomasS

  • Tipp Nummer 1: wenn du sowas wie ein Skript postest, dann bitte zuerst oben den Button </> anklicken und dort die Skript reinkopieren. Dann können wir es hinterher besser lesen.


    Tipp Nummer 2: wenn ich dein Skript, so wie gepostet (nunja, hab alle "gefährlichen" Sachen mal auskommentiert), ausführe, dann erhalte ich diesen Fehler nicht. Er deutet darauf hin, das zu einem if das endif nicht gefunden wird. EIne Idee: kann es sein, dass sich irgendwelche nichtabdruckbare Zeichen eingeschlichen haben? So wie gepostet kann ich den Fehler jedenfalls nicht nachvollziehen.


    Und achja, wie gepostet hat das Skript auch 26 Zeilen. Da kann in Zeile 25 nicht end of file sein.

  • Setze dein then auf eine neue Zeile, oder ein ; davor.


    (Das ist zumindest allgemeine Shellsyntax - die aber auch auf die tcsh zutreffen sollte. )
    (Warum schreibst du überhaupt tcsh? Antiquiertes Unix?)

  • Du hättest ja die Zeilennummern mit angeben können.Ist das die Zeile #25, die mit gzip $datei?


    Stelle mal den Cursor im Editor bis ganz nach unten, letzte Zeile und letztes Zeichen.
    Steht er dann hinter dem i der Variablen $datei?
    Wenn ja, Enter drücken um einen Zeilenumbruch zu bekommen. Abspeichern und testen.
    Wenn nein, habe ich auch keine Idee.


    Ist das die Zeile #25, die mit gzip $datei?

    Ja genau das ist die Zeile. Der Zeilenumbruch hat leider auch nicht funktioniert.

    Für den Inhalt des Beitrages 139778 haftet ausdrücklich der jeweilige Autor: mediamarc

  • Tipp Nummer 1: wenn du sowas wie ein Skript postest, dann bitte zuerst oben den Button </> anklicken und dort die Skript reinkopieren. Dann können wir es hinterher besser lesen.


    Tipp Nummer 2: wenn ich dein Skript, so wie gepostet (nunja, hab alle "gefährlichen" Sachen mal auskommentiert), ausführe, dann erhalte ich diesen Fehler nicht. Er deutet darauf hin, das zu einem if das endif nicht gefunden wird. EIne Idee: kann es sein, dass sich irgendwelche nichtabdruckbare Zeichen eingeschlichen haben? So wie gepostet kann ich den Fehler jedenfalls nicht nachvollziehen.


    Und achja, wie gepostet hat das Skript auch 26 Zeilen. Da kann in Zeile 25 nicht end of file sein.

    Nunja irgendwie wird das "endif" auch gar nicht grün hinterlegt, sondern bleibt weiß. Bedeutet dies, dass der Befehl "endif" nicht erkannt wurde?

    Für den Inhalt des Beitrages 139779 haftet ausdrücklich der jeweilige Autor: mediamarc

  • Moinsen zämme,


    zwischen if .... then muss ein ;


    Dann ist

    Code
    set datei = "$datei/backup.tar"
    set datei = "$datei/`date +%A-%W-%Y-public`.tar"

    unnötig, Du setzt einen Wert und ohne was zu tun überbügelst Du ihn eine Zeile weiter schon wieder. Ergo, das kann in eine Zeile.


    Dann setzt Du im tar einen compress, die Dateiendung des tar spiegelt das aber nicht wieder. Wenn compress, dann sollte die Dateiendung .tgZ heissen bzw. .tar.gz.


    Und ehrlich gesagt werde ich aus Deinem Spaghetticode nicht recht schlau. Im diff z.B. vergleichst du Dateien und Verzeichnisse miteinander .... dass das grundsätzlich Unterschiede gibt, sollte klar sein. Das kann niemals equal sein.


    Dann kloppst Du mit einem > jedesmal die Logdatei neu, sprich alte Werte da drin werden komplett gebügelt und durch den jeweils Aktuellen ersetzt.


    Ergo was um Himmels willen soll dieses Script eigentlich tun?

    Viele Grüße,
    T.

    Für den Inhalt des Beitrages 139780 haftet ausdrücklich der jeweilige Autor: Tamerlain

  • Nunja irgendwie wird das "endif" auch gar nicht grün hinterlegt, sondern bleibt weiß. Bedeutet dies, dass der Befehl "endif" nicht erkannt wurde?

    In welchem Editor? Wenn ich das Skript so wie es oben gepostet ist in kate öffne und dort tcsh Syntaxhighlighting einstelle, dann wird endif fett dargestellt, also durchaus erkannt. Speichere ich es als test.tcsh und öffne es in vi, dann ist es gelb, also auch erkannt.


    Hast du mal versucht, das Skript wieder vom Forum rauszukopieren und bei dir abzuspeichern? Wie gesagt, syntaktisch ist es dann bei mir in Ordnung. Über die Funktion diskutiere ich hier nicht, das war nicht die Frage.

  • Hab jetzt sogar einmal die Manpage von tcsh gelesen.
    Das if Statement ist C- like Syntax, nicht Shellsyntax.


    Lies dazu man tcsh | sed -rn '/if \(expr\) then/,/^$/p'

  • Moin zämme,


    in der csh und tcsh ist die Syntax mit den runden Klammern ok.
    Der Bash hingegen brauchste damit nicht kommen.

    Viele Grüße,
    T.

    Für den Inhalt des Beitrages 139853 haftet ausdrücklich der jeweilige Autor: Tamerlain