En boucle dans Bash: erreur de syntaxe: fin de fichier inattendue

Je suis nouveau dans ce truc de Bash / Shell et je dois faire quelques parsings de réseau pour une affectation uni.

Juste essayer de faire une boucle simple, mais obtenir une erreur étrange qui n’a pas pu résoudre malgré une parsing Google de 2 heures:

#!/bin/bash x=1 while [ $x -le 5 ] do echo "Welcome $x times" x=$(( $x + 1 )) done 

J’ai essayé d’utiliser une boucle for en utilisant la syntaxe suivante:

 #!/bin/bash for i in {1..5} do echo "Welcome $i times" done 

Chaque fois que je place le premier script sur mon serveur, je reçois le message suivant:

 ./temp.sh: line 8: syntax error: unexpected end of file 

Avant d’exécuter ce fichier, j’ai effectué les commandes suivantes pour append des permissions et rendre le fichier exécutable:

 ls -l temp.sh chmod +x temp.sh 

Juste comme une note de côté, j’ai trouvé la question suivante stackoverflow sur les boucles, copié le «code fixe» et a obtenu la même erreur: boucler un script shell Bash

Im version 4+ et utiliser G-VIM comme éditeur de texte sur Windows 7. Quelqu’un a des idées?

GÉRÉ POUR RÉSOUDRE CE MIEUX:

Voyant que ma réputation est encore trop basse, je ne peux pas répondre à cela moi-même pour éviter que les gens perdent leur temps, voici comment je l’ai réparé:

Ok, j’ai réussi à résoudre ce problème et je laisserai ça pour quiconque regarde autour de moi.

Mon problème était que j’utilisais FileZilla pour me connecter à mon serveur. Il semble que même si j’utilisais WinVi ou G-Vim pour créer les fichiers, FileZilla ajoutait une forme de caractères supplémentaires à la fin de mon fichier lorsque je l’ai transféré sur le serveur en exécutant Windows.

Je suis passé à WinSCP en tant qu’agent de connexion et je l’ai essayé.

Merci pour les autres réponses.

Lewis

avant d’exécuter le script bash, utilisez la commande dos2unix dessus

 dos2unix  ./ 

Ok, j’ai réussi à résoudre ce problème et je laisserai ça pour quiconque regarde autour de moi.

Mon problème était que j’utilisais FileZilla pour me connecter à mon serveur. Il semble que même si j’utilisais WinVi ou G-Vim pour créer les fichiers, FileZilla ajoutait une forme de caractères supplémentaires à la fin de mon fichier lorsque je l’ai transféré sur le serveur en exécutant Windows.

Je suis passé à WinSCP en tant qu’agent de connexion et je l’ai essayé.

Avez-vous une nouvelle ligne après le done ? Cela pourrait expliquer le problème.

Est-ce que cela fonctionne avec le bash dans Cygwin sur votre machine? (Cela devrait être le cas, cela fonctionne très bien lorsque copié sur mon Mac, par exemple, avec sh , bash ou ksh exécute.)

J’ai aussi eu ce problème. En fait, la solution à ce problème est lors de l’écriture du script dans le menu de modification EOL La conversion est un format Unix ou non. Ce devrait être le format Unix pour le script shell.