Partage
  • Partager sur Facebook
  • Partager sur Twitter

bash boucle while cannot open / not found

    18 février 2021 à 14:10:01

    bonjour
    cela doit etre simple mais je ne comprend pas pourquoi un truc aussi simple ne marche pas
    # arithm.sh

      I=0
    echo $I test


    while (( I<5 ))

    do

                  echo bonjour
                  let I=I+1      # ((I+1))
    done
    0 test
    arithm.sh: 7: arithm.sh: cannot open 5: No such file
    arithm.sh: 7: arithm.sh: I: not found
    et la meme avec ce code la
      1  #!/bin/bash
         2  cpt=0
         3  while ((cpt<10))
         4  do
         5          echo "Le compteur vaut : $cpt"
         6          ((cpt+=1))
         7  done
         8  exit 0

    test.sh: 3: test.sh: cannot open 10: No such file
    test.sh: 3: test.sh: cpt: not found


    j ai un peu du mal a comprendre que ses exemples de cour de formation a bash ne fonctionne pas chez moi
    cordialement
    • Partager sur Facebook
    • Partager sur Twitter
      18 février 2021 à 14:25:30

      salut,

      le problème ne se répète pas quand je copie/colle/exécute ton script.

      Comment exécutes-tu le script ?
      Quelle est ton installation (matérielle, et logicielle) ?

      j'aurais fait différemment :

      for ((i=0;i<5;i++))
      do
         echo "Bonjour"
      done

      -
      Edité par dantonq 18 février 2021 à 14:26:29

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        18 février 2021 à 14:39:03

        bonjour
        merci de votre réponse
        j exécute mon script dans mon shell normalement
        j ai un peu de mal a comprendre car j ai déjà utilisé des boucles while dans d autre langage
        et la je comprend pas pourquoi il prend pas les conditions
        je suis sous debian et avec le shell bash
        • Partager sur Facebook
        • Partager sur Twitter
          18 février 2021 à 14:52:42

          c'est quoi "normalement" ?!

          détaille les étapes, depuis l'écriture jusqu'au résultat, stp.

          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

            18 février 2021 à 15:07:26

            gael@debian:~/linux_cour$ vi arithm.sh

            # arithm.sh

              I=0
            echo $I test


            while  ((I < 5  ))

            do

                          echo bonjour
                          let I=I+1      # ((I+1))
            done

            :wq

            gael@debian:~/linux_cour$ sh arithm.sh

            gael@debian:~/linux_cour$ uname -a
            Linux debian 4.19.0-14-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) x86_64 GNU/Linux

            creation du fichier avec vi
            enregistrement :wq

            et lancement pas sh arithm.sh



            • Partager sur Facebook
            • Partager sur Twitter
              18 février 2021 à 15:26:35

              un script doit comporter un shebang (il y en a un dans la deuxième version du premier message)
              et être exécutable (chmod +x tonScript)

              enfin être exécuté en indiquant le chemin (./tonScript, si le script est dans le répertoire courant, /chemin/vers/tonScript, sinon)

              l'erreur est due à ce que dash, qui est le shell vers lequel pointe le lien /bin/sh, n'interprète pas certaines syntaxes de bash.

              • Partager sur Facebook
              • Partager sur Twitter

              Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                18 février 2021 à 16:14:34

                oui j ai rajouté le shebang sur le fichier et celui ci est exécutable
                si je teste cela

                #!/bin/bash
                # test3.sh


                 nbr1=5
                 nbr2=6
                 ((nbr1>nbr2))
                 echo $?
                                           # Code retour 1 (faux) car nbr1 n'est pas supérieur à nbr2
                 ((nbr1<nbr2))
                 echo $?
                                           # Code retour 0 (vrai) car nbr1 est inférieur à nbr2

                j ai cela en retour ....
                test3.sh: 7: test3.sh: nbr1: not found
                127
                test3.sh: 10: test3.sh: nbr1: not found
                127

                je comprend rien du tout

                edit: il doit manquer une librairie math dans mon linux , c est pas possible autrement
                il traite les nombres comme des noms de fichier

                -
                Edité par gpfazer 18 février 2021 à 16:19:15

                • Partager sur Facebook
                • Partager sur Twitter
                  18 février 2021 à 16:22:57

                  tu continues d'exécuter ton script avec /bin/sh

                  relis mon message précédent.

                  -
                  Edité par dantonq 18 février 2021 à 16:23:11

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                    19 février 2021 à 19:22:10

                    bonjour


                    désolé mais je n ai pas compris
                    j ai fais un essaie sur le terminal de mon téléphone et j ai le même résultat
                    j ai compris que bash lit le signe < comme une redirection et tente d ouvrir un fichier nommé 5

                    et d alimenter son contenu avec I

                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 février 2021 à 19:37:23

                      si tu fais 
                      sh ./tonScript

                      c'est /bin/dash (ou un autre shell POSIX, vers lequel pointe le lien /bin/sh*), qui exécute le script, et qui ne comprend pas la syntaxe arithmétique telle que bash l'interprète.

                      quand ton script est exécutable, il suffit de l'exécuter (sans le faire précéder d'une indication de shell) en l'appelant par son chemin (./tonScript ou /chemin/vers/tonScript).

                      * pour savoir vers quoi pointe sh :

                      readlink -f $(which sh)

                      -
                      Edité par dantonq 19 février 2021 à 19:38:11

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                      bash boucle while cannot open / not found

                      × 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