2016-11-04 1 views
-2

Suis un novice dans l'écriture de scripts shell sous linux. C'est un script csh mais je l'exécute dans le shell bash, c'est pourquoi j'ai utilisé #!/bin/bash au lieu de #!/bin/csh.Alors que la boucle dans le script shell ne fonctionne pas dans le shell linux bash

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 nombres ne servent qu'à numéroter les lignes.

Le code ci-dessus me donne la sortie avec l'erreur:

it starts 
./me.csh: line 9: syntax error: unexpected end of file 

Je ne peux pas comprendre ce qui est faux, même si elle echos it starts et il n'y a pas de numéro de ligne 9, comme indiqué dans l'erreur.

+2

Votre question tags, le titre et le tralala dit 'bash', mais votre script est' csh'. 'bash' et' csh' sont deux langues différentes. Dans quelle langue avez-vous l'intention d'écrire le script? –

+0

J'ai l'intention d'écrire dans 'csh' mais je le lance depuis le shell' bash' –

+0

Franchement, je vous encourage à empiler avec bash ... – paulsm4

Répondre

2

Le tralala doit être réglé sur la coquille qui devrait interpréter le script. Peu importe le shell dont vous exécutez le script. La seule chose qui compte est la langue dans laquelle le script est écrit.

Votre script est écrit en csh, et doit donc avoir le caractère #!/bin/csh. Ceci est vrai même si vous voulez l'exécuter depuis bash. De plus, vous manquez un espace dans votre arobase-ment:

$ 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

Merci, mais je reçois cette erreur: 'bash: ./me.csh:/bin/csh: mauvais interpréteur: Aucun fichier ou répertoire'. Et mon utilisation de Linux Kali et je ne sais pas si elle n'a pas 'csh'. –

+0

S'il ne dispose pas de csh, vous devez soit installer csh, soit réécrire votre script dans une langue pour laquelle * vous * avez un support. –

+0

J'ai installé 'csh' et maintenant il travaille avec' #!/Bin/csh'. Merci pour vos idées. –

0

Essayez ceci:

#!/bin/bash 
echo it starts 

i=1 
while [ $i -le 5 ]; do 
    echo i is $i 
    i=$((i+1)) 
done 

Exemple de sortie:

it starts 
i is 1 
i is 2 
i is 3 
i is 4 
i is 5 

est ici une grande référence:

BASH Programming - Introduction HOW-TO

+0

Je suis désolé mais peut-être que je n'étais pas plus précis. J'ai édité ma question. –