136 votes

Erreur de syntaxe Bash : fin de fichier inattendue

Pardonnez-moi car c'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

176voto

clyfish Points 3128

Je pense que file.sh est avec des terminaisons de ligne CRLF.

Cours

 dos2unix file.sh

alors le problème sera résolu.

Vous pouvez installer dos2unix dans Ubuntu avec ceci :

 sudo apt-get install dos2unix

166voto

ulidtko Points 3834

Autre chose à vérifier (qui m'est venue à l'esprit) :

  • terminer les corps des fonctions sur une seule ligne avec un point-virgule

C'est-à-dire que cet extrait d'apparence innocente provoquera la même erreur :

 die () { test -n "$@" && echo "$@"; exit 1 }

Pour rendre l'analyseur stupide heureux :

 die () { test -n "$@" && echo "$@"; exit 1; }

64voto

marengaz Points 636

je viens aussi de recevoir ce message d'erreur en utilisant la mauvaise syntaxe dans une clause if

  • else 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

32voto

theRiley Points 41

une clause if => fi non fermée augmentera également cela

astuce : utilisez trap pour déboguer, si votre script est énorme...

par exemple

 set -x
trap read debug

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X