[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.
j'aimerais faire : "pour i = 20 à 10 par pas de -2". Merci.
Configuration: Suse Pro 9.3
5 réponses
-
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 -
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 -
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 -
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.-
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
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut;
#!/bin/bash i=20 until [ ! "$i" -ge "10" ] do echo $i sleep 1 i=$(expr $i - 2) done
;-))