Pardonnez-moi pour ceci est un script très simple dans Bash. Voici le code:
#!/bin/bash
# june 2011
if [ $# -lt 3 -o $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
après avoir exécuté sh file.sh:
erreur de syntaxe: fin de fichier inattendue
Une autre chose à vérifier (vient de m'arriver):
C'est-à-dire que cet extrait de code innocent provoquera la même erreur:
Pour rendre l'analyseur muet heureux:
la source
;
instruction Every doit se terminer par de;
sorte que, à la fin, par exemple:if [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash fi
produira cette erreur, alors queif [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash; fi;
ne remarquera pas les petits points-virgules à la fin, c'est-à-dire: après.bash
etfi
.zsh
utilisateur. Le premier fonctionne danszsh
mais pas danssh
nibash
. J'aimerais être 4 personnes pour pouvoir donner 4 votes positifsJe viens également de recevoir ce message d'erreur en utilisant la mauvaise syntaxe dans une
if
clauseelse if
(erreur de syntaxe: fin de fichier inattendue)elif
(syntaxe correcte)Je l'ai débogué en commentant des bits jusqu'à ce que cela fonctionne
la source
une clause if => fi non fermée le soulèvera également
astuce: utilisez trap pour déboguer, si votre script est énorme ...
par exemple
la source
unexpected end of file
erreur se produira dès que lefi
est frappé.J'ai eu cette réponse de ce problème similaire sur StackOverflow
Ouvrez le fichier dans Vim et essayez
:set fileformat=unix
Merci @lemongrassnginger
la source
dos2unix
que la réponse acceptée conseille.sur cygwin j'avais besoin: -
dans .bash_profile. De cette façon, je n'ai pas besoin d'exécuter unix2dos
la source
J'ai donc trouvé cet article et les réponses ne m'ont pas aidé, mais j'ai pu comprendre pourquoi cela m'a donné l'erreur. J'ai eu un
Le problème était que j'avais copié le code ci-dessus pour être dans une fonction et que j'avais par inadvertance tabulé le code. Il faut s'assurer que le dernier EOF n'est pas tabulé.
la source
EOF
retrait de quatre espaces et bash ne l'avait pas analysé à cause de cela. La suppression des espaces a résolu le problème.J'ai eu le problème quand j'ai écrit la déclaration "if - fi" sur une ligne:
Écrire multiligne a résolu mon problème:
la source
Cela se passait pour moi lorsque j'essayais d'appeler une fonction en utilisant des parens, par exemple
devrait être:
la source
POUR LES FENÊTRES:
Dans mon cas, je travaillais sur le système d'exploitation Windows et j'ai eu la même erreur lors de l'exécution d'autoconf.
Ensuite, j'ai converti le fichier avec la conversion EOL en Windows (CR LF) comme suit:
EDIT -> CONVERSION EOL -> WINDOWS (CR LF)
la source
J'ai pu couper et coller votre code dans un fichier et il a fonctionné correctement. Si vous l'exécutez comme ceci, cela devrait fonctionner:
Votre "file.sh":
La commande:
Notez que "file.sh" doit être exécutable:
Vous obtenez peut-être cette erreur en raison de la façon dont vous effectuez les entrées (avec un tuyau, une carotte, etc.). Vous pouvez également essayer de diviser la condition en deux:
Ou, puisque vous utilisez
bash
, vous pouvez utiliser la syntaxe intégrée:Et, enfin, vous pouvez bien sûr simplement vérifier si 3 arguments ont été donnés (nettoyer, maintient la compatibilité du shell POSIX):
la source
Je viens de copier-coller votre exemple dans un fichier; il a bien fonctionné sous bash. Je n'y vois aucun problème.
Pour faire bonne mesure, vous voudrez peut-être vous assurer qu'il se termine par une nouvelle ligne, bien que bash ne devrait pas s'en soucier. (Il fonctionne pour moi à la fois avec et sans la dernière ligne.)
Vous verrez parfois des erreurs étranges si vous avez accidentellement incorporé un caractère de contrôle dans le fichier. Puisqu'il s'agit d'un script court, essayez de créer un nouveau script en le collant à partir de votre question ici sur StackOverflow, ou en le retapant simplement.
Quelle version de bash utilisez-vous? (
bash --version
)Bonne chance!
la source
Assurez-vous que le nom du répertoire dans lequel se trouve le fichier .sh ne comporte pas de caractère espace. Par exemple: dites que si c'est dans un dossier appelé «Nouveau dossier», vous êtes obligé de rencontrer l'erreur que vous avez citée. Au lieu de cela, nommez-le simplement «New_Folder». J'espère que ça aide.
la source
Apparemment, certaines versions du shell peuvent également émettre ce message lorsque la dernière ligne de votre script n'a pas de nouvelle ligne.
la source
Dans Ubuntu:
Ensuite,
File -> Save as
et réglezend line
surUnix/Linux
la source
Je sais que je suis trop tard à la fête. J'espère que cela peut aider quelqu'un.
Vérifiez votre fichier .bashrc. Peut-être le renommer ou le déplacer.
Discussion ici: Impossible de trouver un script bash simple
la source
Pour les personnes utilisant MacOS:
Si vous avez reçu un fichier au format Windows et que vous vouliez exécuter sur MacOS et que vous voyiez cette erreur, exécutez ces commandes.
la source
Manquer une accolade fermante sur une définition de fonction provoquera cette erreur comme je viens de le découvrir.
Ce qui bien sûr devrait être comme ça ...
la source
Dans mon cas, il y a un redondant
\
dans ce qui suit:Il n'y a pas un
\
à la fin deDATA.PATH_PREFIX ./afs/kinetics400
la source