Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Shell script] Une simple boucle while

Sujet résolu
    1 janvier 2008 à 15:34:46

    Bonjour :)

    J'aimerai faire executer des commandes en boucle par mon serveur web toutes les X secondes.
    J'ai donc pensé faire ce petit script shell :

    1. #!/bin/sh
    2. while [ 1 ]
    3. do
    4. {...}
    5. chmod 775 -R /home/stats/
    6. {...}
    7. sleep 10
    8. done


    Voila l'erreur qui suit l'éxécution :
    stephane@stephane-desktop:~/shell$ sh chmodhtml.sh 
    : not foundh: 2: 
    chmodhtml.sh: 11: Syntax error: "done" unexpected (expecting "do")



    J'ai bien cherché tout ce que je pouvais à propos de la syntaxe d'une boucle while, je n'ai rien trouvé d'autre..

    Merci d'avance !
    ++
    • Partager sur Facebook
    • Partager sur Twitter
      1 janvier 2008 à 16:39:04

      Tu aurais peut-être plus de réponses sur le Forum Linux, non ?
      • Partager sur Facebook
      • Partager sur Twitter
        1 janvier 2008 à 16:42:37

        Essaies comme ceci:

        1. #!/bin/sh
        2. while [ 1 ]
        3. do
        4.      chmod 775 -R /home/stats/
        5.      sleep 10
        6. done
        • Partager sur Facebook
        • Partager sur Twitter
          1 janvier 2008 à 17:38:43

          Citation : Tim...

          Tu aurais peut-être plus de réponses sur le Forum Linux, non ?


          C'est de la programmation.

          Citation : graeme

          Essaies comme ceci:

          1. #!/bin/sh
          2. while [ 1 ]
          3. do
          4.      chmod 775 -R /home/stats/
          5.      sleep 10
          6. done


          Je comprend pas trop les modifs là ?
          Mes {...} signifiaient que j'abrégeais les autres commandes pour pas charger inutilement le code ici.
          Si c'est l'indentation, ca ne change rien. :'(

          Citation : Tjrs une erreur x_x


          stephane@stephane-desktop:~/shell$ sudo sh shellounet.sh
          shellounet.sh: 7: Syntax error: end of file unexpected (expecting "do")



          (..oui bon le nom hein :D)
          • Partager sur Facebook
          • Partager sur Twitter
            1 janvier 2008 à 17:51:50

            Tu as bien pensé à mettre un espace après le crochet ?

            J'entends quelque chose comme :

            1. ...
            2. while %[%1%]%
            3. do
            4.     ...
            5. done
            6. ....


            où les % sont la représentations de l'espace.

            Edit: je viens de tester avec et sans espace et le résultat est le même chez moi. Donc ce que j'ai dit n'ai d'aucune utilité.
            • Partager sur Facebook
            • Partager sur Twitter
              1 janvier 2008 à 18:00:05

              Salut,

              Je ne vois rien qui pose problème dans ton code, la syntaxe de la boucle while est correcte. L'erreur doit provenir du code à l'intérieur de la boucle, poste l'intégralité du script.
              • Partager sur Facebook
              • Partager sur Twitter
                1 janvier 2008 à 18:13:55

                Citation : w1nny

                Je comprend pas trop les modifs là ?



                Oui, c'est vrai. Non mais c'est rien, c'est surement le champagne, désolé.
                • Partager sur Facebook
                • Partager sur Twitter
                  1 janvier 2008 à 18:19:10

                  Citation : gouttegd

                  Salut,

                  Je ne vois rien qui pose problème dans ton code, la syntaxe de la boucle while est correcte. L'erreur doit provenir du code à l'intérieur de la boucle, poste l'intégralité du script.



                  1. #!/bin/sh
                  2. while [ 1 ]
                  3. do
                  4.      chmod 775 -R /home/stats/
                  5.      sleep 10
                  6. done


                  Rien que ce code ci ne marche pas..

                  Citation : graeme

                  Citation : w1nny

                  Je comprend pas trop les modifs là ?



                  Oui, c'est vrai. Non mais c'est rien, c'est surement le champagne, désolé.


                  Tu m'aurais au moins fait penser à indenter tout n'est pas perdu merci :D

                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 janvier 2008 à 18:27:20

                    @ w1nny : chez moi, il fonctionne...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 janvier 2008 à 18:30:24

                      ><'. Misère.
                      Le problème peut venir d'où ? :/

                      Je fais bien $ sh machin.sh pour le lancer.
                      Je peux pas réinstaller un quelconque module shell sur mon ordi ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 janvier 2008 à 19:03:37

                        Les options de chmod vont avant le mode.
                        Edit: mais il accepte quand même l'inverse, donc rien
                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 janvier 2008 à 21:52:55

                          Tu utilises quoi comme shell ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            1 janvier 2008 à 22:12:34

                            C'est à dire ? :o

                            Pour ne pas écrire un message pour rien, j'peux toujours te dire que c'est un serveur sous Ubuntu 7.10, hébérgé chez moi.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              1 janvier 2008 à 22:23:39

                              Ben, le shell, quoi... l'interpréteur de commandes, celui qui exécute ton script.

                              bash, ksh, tcsh, zsh... Ils n'ont pas tous la même syntaxe.

                              (Bon, cela, en principe bash est le shell par défaut avec la plupart des distributions, donc si tu ne savais même pas ce que c'était il y a peu de chance que tu ais modifié ça, donc c'est pas ça...)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                1 janvier 2008 à 22:27:41

                                Oui pardon c'est du bash.
                                En effet j'ai jamais modifié ça.

                                J'avais écrit un autre script shell il y a quelques mois pour une autre fonction, et il fonctionne parfaitement..
                                Il doit vraiment y avoir un problème avec cette boucle o_O .

                                Tu aurais pas un exemple de script contenant une boucle qui marcherait à coup sûr, voir si mon shell est pas défectueux.. ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  1 janvier 2008 à 22:42:51

                                  Ben j'ai le tien, et il fonctionne :(

                                  Et de toute façon, je maintiens qu'il n'y aucun problème dans la syntaxe de ta boucle. C'est pour ça que là je ne comprends vraiment pas...

                                  À tout hasard, j'ai la version 3.1.17 de bash.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    1 janvier 2008 à 22:44:14

                                    C'est dangereux de désinstaller le bash et de le réinstaller ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      1 janvier 2008 à 22:47:31

                                      Et si tu essaies avec l'interpréteur bash et non sh, à tout hasard?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        2 janvier 2008 à 14:40:21

                                        stephane@stephane-desktop:~/shell$ bash shellounet
                                        shellounet: line 7: syntax error: unexpected end of file
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          2 janvier 2008 à 15:12:31

                                          Bonjour,

                                          Donne nous ton code en entier, s'il te plaît, car le message d'erreur dit qu'il attend "do". Donc, le problème vient du code à l'intérieur.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            2 janvier 2008 à 15:23:15

                                            J'ai toujouuuuuurs le même code..

                                            1. #!/bin/sh
                                            2. while [ 1 ]
                                            3. do
                                            4.      chmod 775 -R /home/stats/
                                            5.      sleep 10
                                            6. done


                                            (D'ailleurs il faut un ; après le [ 1 ] ? Certains disent oui d'autres non. Dans tous cas les ça ne résout rien.)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              2 janvier 2008 à 15:30:51

                                              Le ';' après la condition c'est pour pouvoir mettre le "do" sur la même ligne :
                                              1. while [ 1 ]; do
                                              2.     echo Hello world
                                              3. done


                                              mais ça ne change rien, c'est parfaitement équivalent à
                                              1. while [ 1 ]
                                              2. do
                                              3.     echo Hello World
                                              4. done


                                              (Cela dit, ça ne nous avance pas...)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                2 janvier 2008 à 15:54:19

                                                Et à tout hasard, si t'essayais ton script dans un environnement bash #!/bin/bash et si ça ne fonctionne toujours pas, tu écris while : au lieu de while [ 1 ]

                                                Bonne chance, parce qu'effectivement chez moi ta boucle fonctionne très bien aussi ;-)

                                                Bye.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  2 janvier 2008 à 16:03:55

                                                  Mais merde x_x.
                                                  Si on oublie le code, au niveau de l'interpréteur de commande j'ai quelle(s) solution(s) ?

                                                  apt-get remove bash && apt-get install bash ?

                                                  Ce qui me sidère, c'est que l'autre script fonctionne..
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    2 janvier 2008 à 16:32:03

                                                    Je doute qu'une réinstallation de bash change quoi que ce soit à l'affaire...

                                                    Tu utilises quoi pour éditer tes fichiers ? À tout hasard, ce fichier provient-il du "monde Windows" ? (J'ai déjà rencontré des problèmes avec des scripts commencés sous Windows, en raison de la différence des fins de lignes entre Windows et Unix.)
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      2 janvier 2008 à 16:41:59

                                                      J'utilise vim en ssh..
                                                      A la rigueur, j'ai pu éditer le fichier en question depuis un autre post sous ubuntu, mais c'est tout !

                                                      Je vais essayer de le recréer entièrement depuis la machine qui pose problème.

                                                      gouttegd : C'était ça :D.
                                                      En recréant le fichier uniquement depuis mon shell, ça fonctionne à merveille. :D
                                                      Merci d'avoir répondu aussi vite et aussi régulièrement, tu me sauves la vie !

                                                      Bonne journée à tous !
                                                      ++

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      [Shell script] Une simple boucle while

                                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                      • Editeur
                                                      • Markdown