Suis un peu novice dans l'écriture de scripts shell sous Linux. C'est un csh
script mais je l'exécute dans le bash
shell que j'ai utilisé #!/bin/bash
au lieu de #!/bin/csh
.
1 #!/bin/bash
2 set i = 1
3 echo it starts
4
5 while ($i <= 5)
6 echo i is $i
7 @ i= $i +1
8 end
** Remarque: ** Les chiffres servent uniquement à numéroter les lignes.
Le code ci-dessus me donne la sortie avec erreur:
it starts ./me.csh: line 9: syntax error: unexpected end of file
Je ne peux pas comprendre ce qui ne va pas même si ça fait écho it starts
et il n'y a pas de ligne numéro 9 comme spécifié dans l'erreur.
Réponses:
2 pour la réponse № 1Le shebang doit être défini sur le shell qui doit interpréter le script. Le shell dans lequel vous exécutez le script importe peu. La seule chose qui compte est le langage dans lequel le script est écrit.
Votre script est écrit en csh
, et doit donc avoir le shebang #!/bin/csh
. Cela est vrai même si vous voulez l'exécuter à partir de bash. En outre, il vous manquait un espace dans votre signature:
$ cat me.csh
#!/bin/csh
set i = 1
echo it starts
while ($i <= 5)
echo i is $i
@ i = $i + 1
end
Sortie:
$ ./me.csh
it starts
i is 1
i is 2
i is 3
i is 4
i is 5
0 pour la réponse № 2
Essaye ça:
#!/bin/bash
echo it starts
i=1
while [ $i -le 5 ]; do
echo i is $i
i=$(( i+1 ))
done
Sortie de l'échantillon:
it starts
i is 1
i is 2
i is 3
i is 4
i is 5
Voici une excellente référence:
Programmation BASH - Introduction HOW-TO