Verzeih mir, dass dies ein sehr einfaches Skript in Bash ist. Hier ist der Code:
#!/bin/bash
# june 2011
if [ $# -lt 3 -o $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
nach dem Ausführen von sh file.sh:
Syntaxfehler: Unerwartetes Dateiende
Eine andere Sache zu überprüfen (ist mir gerade eingefallen):
Dh dieser unschuldig aussehende Ausschnitt verursacht den gleichen Fehler:
Um den dummen Parser glücklich zu machen:
quelle
;
dass erwartet wird, dass jede Aussage mit;
so endet , dass am Ende zB:if [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash fi
dieser Fehler erzeugt wird, währendif [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash; fi;
... die kleinen Semikolons am Ende nicht bemerkt werden, dh: nach.bash
undfi
.zsh
Benutzer mitgeteilt wurde. Ersteres funktioniert in,zsh
aber nicht insh
nochbash
. Ich wünschte, ich wäre 4 Leute, damit ich diese 4 Upvotes geben könnteIch habe auch gerade diese Fehlermeldung erhalten, indem ich die falsche Syntax in einer
if
Klausel verwendet habeelse if
(Syntaxfehler: unerwartetes Dateiende)elif
(korrekte Syntax)Ich debuggte es, indem ich Bits auskommentierte, bis es funktionierte
quelle
Eine nicht geschlossene if => fi-Klausel löst dies ebenfalls aus
Tipp: Verwenden Sie Trap zum Debuggen, wenn Ihr Skript sehr umfangreich ist ...
z.B
quelle
unexpected end of file
Fehler auftritt, sobald derfi
getroffen wird.Ich habe diese Antwort von diesem ähnlichen Problem auf StackOverflow erhalten
Öffnen Sie die Datei in Vim und versuchen Sie es
:set fileformat=unix
Danke @lemongrassnginger
quelle
dos2unix
wie in der akzeptierten Antwort angegeben.auf cygwin brauchte ich: -
in .bash_profile. Auf diese Weise musste ich unix2dos nicht ausführen
quelle
Also fand ich diesen Beitrag und die Antworten halfen mir nicht, aber ich konnte herausfinden, warum es mir den Fehler gab. Ich hatte ein
Das Problem war, dass ich den obigen Code kopiert habe, um in einer Funktion zu sein, und den Code versehentlich mit Registerkarten versehen habe. Stellen Sie sicher, dass der letzte EOF nicht mit Registerkarten versehen ist.
quelle
EOF
vier Leerzeichen eingerückt und Bash hat es deswegen nicht analysiert. Das Entfernen von Leerzeichen hat das Problem behoben.Ich hatte das Problem, als ich die Anweisung "if - fi" in eine Zeile schrieb:
Mehrzeiliges Schreiben löste mein Problem:
quelle
Dies geschah für mich, als ich versuchte, eine Funktion mit Parens aufzurufen, z
sollte sein:
quelle
FÜR WINDOWS:
In meinem Fall habe ich unter Windows gearbeitet und beim Ausführen von autoconf den gleichen Fehler erhalten.
Dann habe ich die Datei mit EOL- Konvertierung in Windows (CR LF) wie folgt konvertiert :
BEARBEITEN -> EOL-KONVERTIERUNG -> FENSTER (CR LF)
quelle
Ich konnte Ihren Code ausschneiden und in eine Datei einfügen, die ordnungsgemäß ausgeführt wurde. Wenn Sie es so ausführen, sollte es funktionieren:
Ihre "file.sh":
Der Befehl:
Beachten Sie, dass "file.sh" ausführbar sein muss:
Möglicherweise erhalten Sie den Fehler b / c, wie Sie Eingaben machen (mit Pfeife, Karotte usw.). Sie können auch versuchen, die Bedingung in zwei Teile aufzuteilen:
Da Sie verwenden
bash
, können Sie auch die integrierte Syntax verwenden:Und schließlich können Sie natürlich auch überprüfen, ob 3 Argumente angegeben wurden (sauber, behält die POSIX-Shell-Kompatibilität bei):
quelle
Ich habe gerade Ihr Beispiel ausgeschnitten und in eine Datei eingefügt. es lief gut unter Bash. Ich sehe keine Probleme damit.
Für ein gutes Maß möchten Sie vielleicht sicherstellen, dass es mit einer neuen Zeile endet, obwohl Bash sich nicht darum kümmern sollte. (Es läuft für mich sowohl mit als auch ohne die letzte Zeile.)
Manchmal werden seltsame Fehler angezeigt, wenn Sie versehentlich ein Steuerzeichen in die Datei eingebettet haben. Da es sich um ein kurzes Skript handelt, versuchen Sie, ein neues Skript zu erstellen, indem Sie es aus Ihrer Frage hier in StackOverflow einfügen oder es einfach erneut eingeben.
Welche Version von Bash verwenden Sie? (
bash --version
)Viel Glück!
quelle
Stellen Sie sicher, dass der Name des Verzeichnisses, in dem sich die .sh-Datei befindet, kein Leerzeichen enthält. Beispiel: Wenn Sie sich in einem Ordner mit dem Namen "Neuer Ordner" befinden, werden Sie auf den von Ihnen genannten Fehler stoßen. Nennen Sie es stattdessen einfach "New_Folder". Ich hoffe das hilft.
quelle
Anscheinend können einige Versionen der Shell diese Nachricht auch ausgeben, wenn in der letzten Zeile Ihres Skripts keine neue Zeile vorhanden ist.
quelle
In Ubuntu:
Dann
File -> Save as
und setzenend line
aufUnix/Linux
quelle
Ich weiß, ich bin zu spät zur Party. Hoffe das kann jemandem helfen.
Überprüfen Sie Ihre .bashrc-Datei. Vielleicht umbenennen oder verschieben.
Diskussion hier: Es kann kein einfaches Bash-Skript erstellt werden
quelle
Für Benutzer von MacOS:
Wenn Sie eine Datei im Windows-Format erhalten haben und unter MacOS ausgeführt werden möchten und dieser Fehler angezeigt wird, führen Sie diese Befehle aus.
quelle
Das Fehlen einer schließenden Klammer in einer Funktionsdefinition führt zu diesem Fehler, wie ich gerade entdeckt habe.
Was natürlich so sein sollte ...
quelle
In meinem Fall gibt es eine Redundanz
\
wie folgt:Es ist NICHT ein
\
am EndeDATA.PATH_PREFIX ./afs/kinetics400
quelle