[script sh] boucle for

Bonjour, savez-vous comment faire une boucle "pour" en script sh ?

j'aimerais faire : "pour i = 20 à 10 par pas de -2". Merci.
Configuration: Suse Pro 9.3

5 réponses

  1. Modérateur
    Je ne sais pas si l'utilitaire seq est livré sous Suse, mais sous mon Etch
    johan@johan:~$ for x in $(seq  1 10); do echo -n "$x "; done ; echo
    1 2 3 4 5 6 7 8 9 10
    johan@johan:~$ for x in $(seq  -w 1 10); do echo -n "$x "; done ; echo
    01 02 03 04 05 06 07 08 09 10
    johan@johan:~$ for x in $(seq  -w 1 3 15); do echo -n "$x "; done ; echo
    01 04 07 10 13
    johan@johan:~$ dpkg -S $(which seq)
    coreutils: /usr/bin/seq
    


    man seq , donc
    Johan
    12
    1. Modérateur
      Salut,

      seq je ne savais pas. Merci.

      lami20j
      0
    2. Modérateur
      Salut,

      Itou, merci ;-))
      0
    3. OK, merci ! elle est trop bien cette commande seq !!
      0
  2. Modérateur
    Résumé de la solution en ligne de commandes :

    for x in $(seq 20 -2 10); do echo $x; done


    Dans un script shell :

    #!/bin/sh    
    
    for x in $(seq 20 -2 10)    
    do    
      echo $x    
    done    
    


    Note : on peut aussi utiliser l'opérateur backquote au lieu de $(...).

    Bonne continuation
    4
    1. Bonjour, merci pour vos réponses. J'ai écrit hier une solution mais je ne comprends pas bien mon résultat obtenu. Voici mon code :

      #!/bin/sh
      
      var=20
      while [ var > 10 ]
      do
        echo "var = $var"
        var=`expr $var - 2`
      done
      


      et voici ma sortie :

      var = 20
      var = 18
      var = 16
      var = 14
      var = 12
      var = 10
      var = 8
      var = 6
      var = 4
      var = 2
      var = 0
      var = -2
      var = -4
      var = -6
      var = -8
      var = -10
      var = -12
      var = -14
      var = -16
      var = -18
      var = -20
      var = -22
      


      et ainsi de suite...
      Pourquoi le calcul ne s'arrête pas lorsque var<=10 ?
      Et comment faire pour écrire "tant que var est supérieur ou égal à 10" ? J'ai essayé la formule " >= " (cf www.shellunix.com) mais ça n'a pas l'air de bien marcher...
      Merci encore.
      1
      1. Modérateur
        Essaye plutôt ceci:
        johan@johan:~$ var=25 ;while [ $var -gt 10 ]; do   echo "var = $var";   var=`expr $var - 2`; done
        var = 25
        var = 23
        var = 21
        var = 19
        var = 17
        var = 15
        var = 13
        var = 11

        C'est l'opérateur -gt qu'il faut utiliser.
        Ne pas oublier le $ devant le nom de la variable (hors assignation)
        extrait de man [
        INTEGER1 -eq INTEGER2
        INTEGER1 is equal to INTEGER2

        INTEGER1 -ge INTEGER2
        INTEGER1 is greater than or equal to INTEGER2

        Johan
        0
      2. @jisisvOK, effectivement, le code suivante marche correctement

        #!/bin/sh
        
        var=20
        while [ $var -ge 10 ]
        do
          echo "var = $var"
          var=`expr $var - 2`
        done
        


        Merci
        0
    2. Modérateur
      Salut;
      #!/bin/bash
      
      i=20
      until [ ! "$i" -ge "10" ]
      do
      echo $i
      sleep 1
      i=$(expr $i - 2)
      done
      ;-))
      0