Boucle for en shell [Résolu/Fermé]

Signaler
Messages postés
28
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
19 mars 2009
-
Messages postés
28
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
19 mars 2009
-
Bonjour,

Voilà, je débute en shell et j'aimerais faire un script shell sous Debian faisant une boucle for.
Ce script permettrai d'appeller deux scripts shell.
Par exemple j'ai 3 variables toto,toto1 et toto2 et j'aimerais faire un truc du style
for i = toto,toto1,toto2
do (/etc/script1.pl -config=i)
(/etc/script2.pl -config=i)
done
Je sais pas si c'est assez clair.
Si possible j'aimerais aussi que toute les boucles se fassent même si la première n'est pas encore finis.
Merci pour votre aide.

7 réponses

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Salut,
Teste :
for i in toto toto1 toto2
do /etc/script1.pl -config=$i
/etc/script2.pl -config=$i
done 

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

Si tu veux que les scripts soient lancés en parallèle il te faut les lancer en arrière-plan (&) et pour ne pas interrompre l'exécution du dernier job, attendre la fin de son exécution (wait) :
for i in toto{,{1,2}}
do 
(
/etc/script1.pl -config=${i} &
/etc/script2.pl -config=${i}
)&
done
wait
;-))
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Salut,
for i in toto{,1,2} devrait suffire non ?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 757 >
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016

Oui effectivement, merci ;-))
Messages postés
28
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
19 mars 2009

Je vous remercie pour les réponses.
Une dernière question à quoi sert le sleep??
Mon but est de lancer cette boucle toutes les 5 minutes sans utiliser la crontab.
Il faut que j'associe ce script au service de démarrage et après ke la boucle se fasse toutes les 5 minutes.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Une dernière question à quoi sert le sleep??
Pour faire une pause. sleep 5 attendra 5 secondes. sleep 5 m pour attendre 5 minutes.
Dommage de ne pas utiliser cron, c'est fait pour ^^.
Messages postés
28
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
19 mars 2009

Lorsque je met un sleep 10 , mon script se coupe au bout de 10 secondes. Moi j'aimerais qu'il refasse la boucle.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Normal. Le sleep fait une pause et après le script poursuit son petit bonhomme de chemin.
Si tu veux que ton action se relance toutes les 10 secondes sans cron, tu peux faire un sleep 10 dans une boucle while true.
Par exemple :
while true; do
   #action à faire
   sleep 10
done

Cdlt
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 757
while :
do
for i in toto toto1 toto2
do /etc/script1.pl -config=$i &
/etc/script2.pl -config=$i
done 
sleep 10
done
Messages postés
28
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
19 mars 2009

Merci beaucoup pour votre aide. Cela fonctionne très bien.