Création
d'entreprise
Posez votre question Signaler

[script sh] boucle for

pom - Dernière réponse le 26 avril 2010 à 19:48
Bonjour, savez-vous comment faire une boucle "pour" en script sh ?

j'aimerais faire : "pour i = 20 à 10 par pas de -2". Merci.
Lire la suite 

[script sh] boucle for »

10 réponses
Réponse
+9
moins plus
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
lami20j- 1 août 2006 à 16:34
Salut,

seq je ne savais pas. Merci.

lami20j
jipicy- 1 août 2006 à 21:25
Salut,

Itou, merci ;-))
pom - 2 août 2006 à 09:49
OK, merci ! elle est trop bien cette commande seq !!
Ajouter un commentaire
Réponse
+1
moins plus
Une petite recherche google donne :
http://www.bsdbooks.net/shells/scripting/fr/loops1.html

Un autre exemple disponible ici
http://www.tuteurs.ens.fr/unix/shell/boucle.html
#!/bin/sh
# Fichier "liste"

for element in *
   do echo "$element"
done

Bonne chance
Ajouter un commentaire
Réponse
+1
moins plus
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.
jisisv- 1 août 2006 à 16:51
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
pom - 2 août 2006 à 09:45
OK, effectivement, le code suivante marche correctement

#!/bin/sh

var=20
while [ $var -ge 10 ]
do
  echo "var = $var"
  var=`expr $var - 2`
done


Merci
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
Salut;
#!/bin/bash

i=20
until [ ! "$i" -ge "10" ]
do
echo $i
sleep 1
i=$(expr $i - 2)
done
;-))
Ajouter un commentaire
Ce document intitulé « [script sh] boucle for » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?