[script sh] boucle for

pom -  
mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   -
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 3678 Statut Modérateur 935
 
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 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

seq je ne savais pas. Merci.

lami20j
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Itou, merci ;-))
0
pom
 
OK, merci ! elle est trop bien cette commande seq !!
0
mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   7 898
 
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 34243 Date d'inscription   Statut Modérateur Dernière intervention   7 898
 
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
pom
 
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 3678 Statut Modérateur 935
 
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 3678 Statut Modérateur
 
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 41342 Statut Modérateur 4 896
 
Salut;
#!/bin/bash

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