J'ai eu cette erreur après l'exécution du script shell comme ci-dessous.
$ ./script_test.sh
./script_test.sh: line 3: syntax error near unexpected token `$'do\r''
'/script_test.sh: line 3: `for ((j=0; j<"$N"; j++)) ; do
Script ci-dessous
#!/bin/sh
# This script will launch 10 simulations for each value of the PARAM1_LIST.
# Simulations results will be stored in folders named "myTest-i-j", where i
# is the effective value of the PARAM1_LIST for each simulation and j
# is the 1 to 10 repetition for each i.
N=10
PARAM1_LIST=(1 2 5 10)
for (( j = 0 ; j < $N; j++ )); do
for i in ${PARAM1_LIST[@]}; do
java -jar N3Sim.jar myConfigFile.cfg myTest-${i}-${j} $i
done
done
bash
cygwin
shell-script
newlines
leepyron
la source
la source
#!/bin/sh
au lieu de!/bin/sh
?set -x
dessous de la ligne shebang pour obtenir plus d'informations de débogage.$'do\r
. C'est\r
une nouvelle ligne . Peut-être cette ligne a-t-elle été écrite ou copiée depuis un endroit avec des fins de ligne autres que celles attendues par votre interprète.Réponses:
Votre script contient des retours
CR
LF
à la ligne DOS au lieu de ceux UnixLF
.$'\r'
est une séquence d'échappement bash pour leCR
caractère de contrôle qui ne devrait normalement pas être contenu dans les fichiers texte Unix. C'était à la fin de la ligne 3, qui est maintenant la ligne 11, car vous avez probablement ajouté la séquence shebang et les commentaires plus tard.La solution consiste à convertir les nouvelles lignes:
Notez également que le script utilise la construction bash du tableau et que le shebang devrait l'être
#!/bin/bash
.la source
dos2unix
utilitaire (comme indiqué dans la réponse), qui fait partie de Cygwin . Si, pour une raison quelconque, vous ne pouvez pas installer ledos2unix
package, vous pouvez utiliser par exemplesed 's/\r//' script_test.sh >script_test-converted.sh
outr -d '\r' <script_test.sh >script_test-converted.sh
. Voir Alternatives à la conversion unix2dos .#!/bin/bash
? C'est un chemin d'accès à l'interpréteur de script qui lira et interprétera votre fichier de script lorsque vous l'exécuterez. Par exemple, le script Korn Shell commencerait par#!/bin/ksh
.#!/bin/sh
le fichier en commençant par#!/bin/bash
car votre script est un script Bash.Vous utilisez les fonctionnalités bash mais utilisez un interpréteur sh. Changer la ligne shebang à
#!/bin/bash
Pour décomposer:
la source
Une autre solution possible en utilisant l'éditeur de texte unix vi:
ouvrir le fichier dans vi edit avec la
vi filename.sh
commande;tapez la
:set ff=unix
commande vi ;enregistrer le fichier avec
:wq
Il enregistre le fichier avec les fins de ligne Unix.
la source