syntax error: unexpected end of file - Wieso?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

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.
  • syntax error: unexpected end of file - Wieso?

    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:

    Shell-Script

    1. #!/bin/tcsh
    2. set datei = "/var/backup"
    3. if (`date +%U` % 2 == 0) then
    4. set datei = "$datei/gerade"
    5. else
    6. set datei = "$datei/ungerade"
    7. endif
    8. set datei = "$datei/backup.tar"
    9. set datei = "$datei/`date +%A-%W-%Y-public`.tar"
    10. cd /media/.....
    11. if (`date +%w` == 1) then
    12. tar -cvzf $datei ./* > /var/log/tar.log
    13. else
    14. find . -mtime -1 -print |sort |uniq > /var/log/tar.files
    15. find . -mtime -1 -type d -print | sort |uniq > /var/log/tar.files.dir
    16. diff /var/log/tar.files /var/log/tar.files.dir | gawk '/</ {print $2}' | sort > /var/log/tar.update
    17. tar -cvzT /var/log/tar.update -f $datei > /var/log/tar.log
    18. rm /var/log/tar.files
    19. rm /var/log/tar.files.dir
    20. rm /var/log/tar.update
    21. endif
    22. gzip $datei
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal 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

  • mediamarc schrieb:

    "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.

    Für den Inhalt des Beitrages 139599 haftet ausdrücklich der jeweilige Autor: letsfindaway

  • 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?)
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 139699 haftet ausdrücklich der jeweilige Autor: Berichtigung

  • ThomasS schrieb:

    mediamarc schrieb:

    "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.

    ThomasS schrieb:

    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

  • letsfindaway schrieb:

    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

    Quellcode

    1. set datei = "$datei/backup.tar"
    2. 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

  • mediamarc schrieb:

    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.

    Für den Inhalt des Beitrages 139801 haftet ausdrücklich der jeweilige Autor: letsfindaway

  • 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'
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 139816 haftet ausdrücklich der jeweilige Autor: Berichtigung