[script sh] boucle for

Fermé
pom - 31 juil. 2006 à 16:39
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 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.
A voir également:

5 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
1 août 2006 à 15:50
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
1 août 2006 à 16:34
Salut,

seq je ne savais pas. Merci.

lami20j
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
1 août 2006 à 21:25
Salut,

Itou, merci ;-))
0
OK, merci ! elle est trop bien cette commande seq !!
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié par mamiemando le 26/04/2010 à 19:50
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
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
31 juil. 2006 à 19:44
Une petite recherche google donne :
http://www.bsdbooks.net/shells/scripting/fr/loops1.html

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

for element in *
   do echo "$element"
done

Bonne chance
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
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
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
0
pom > jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
31 juil. 2006 à 22:34
Salut;
#!/bin/bash

i=20
until [ ! "$i" -ge "10" ]
do
echo $i
sleep 1
i=$(expr $i - 2)
done
;-))
0