Rechercher : dans
Par :

[script sh] boucle for

Dernière réponse le 29 mai 2008 à 19:34:37 pom, le 31 jui 2006 à 16:39:49 
 Signaler ce message aux modérateurs

Bonjour, savez-vous comment faire une boucle "pour" en script sh ?

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

Configuration: Suse Pro 9.3

Meilleures réponses pour « [script sh] boucle for » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha-Bang Premièrement,...
[IE] Erreur de script / Effectuer un débogage VoirDe temps en temps, lorsque vous naviguez sur le Net et que vous chargez une page Web, un message d'erreur de script survient : Une erreur est survenue. Une erreur est survenue sur le script de cette page. Souhaitez-vous effectuer un...
Télécharger NTFS for Mac OS X VoirAccès total en lecture et en écriture vers des volumes NTFS NTFS for Mac® OS X fournit un accès total (lecture ou écriture, formatage) vers des partitions NTFS. Compatible avec toutes les versions de NTFS Toutes les versions NTFS sont prises en...

1

mamiemando, le 31 jui 2006 à 19:44:25

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

Répondre à mamiemando

2

jipicy, le 31 jui 2006 à 22:34:16

Salut;

#!/bin/bash

i=20
until [ ! "$i" -ge "10" ]
do
echo $i
sleep 1
i=$(expr $i - 2)
done
;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

3

pom, le 1 aoû 2006 à 10:05:45

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.

Répondre à pom

6

jisisv, le 1 aoû 2006 à 16:51:18

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 Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)

Répondre à jisisv

8

pom, le 2 aoû 2006 à 09:45:36

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

Répondre à pom

4

jisisv, le 1 aoû 2006 à 15:50:44

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 Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)

Répondre à jisisv

5

lami20j, le 1 aoû 2006 à 16:34:19

Salut,

seq je ne savais pas. Merci.

lami20j

Répondre à lami20j

7

jipicy, le 1 aoû 2006 à 21:25:35

Salut,

Itou, merci ;-))
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

9

 pom, le 2 aoû 2006 à 09:49:19

OK, merci ! elle est trop bien cette commande seq !!

Répondre à pom