[script sh] boucle for [Fermé]

Signaler
-
Messages postés
29267
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
30 juillet 2020
-
Bonjour, savez-vous comment faire une boucle "pour" en script sh ?

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

5 réponses

Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
888
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56914 internautes nous ont dit merci ce mois-ci

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 477
Salut,

seq je ne savais pas. Merci.

lami20j
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 754
Salut,

Itou, merci ;-))
OK, merci ! elle est trop bien cette commande seq !!
Messages postés
29267
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
30 juillet 2020
6 895
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
Messages postés
29267
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
30 juillet 2020
6 895
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
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.
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
888
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
>
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017

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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 754
Salut;
#!/bin/bash

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