Script sh et parallélisme
Fermé
bernard
-
11 févr. 2010 à 00:37
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 16 févr. 2010 à 06:30
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 16 févr. 2010 à 06:30
A voir également:
- Script sh et parallélisme
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Script bat - Guide
- Microsoft activation script - Accueil - Windows
- Executeur de script - Télécharger - Édition & Programmation
2 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
11 févr. 2010 à 08:58
11 févr. 2010 à 08:58
Salut,
Et pourquoi pas plutôt une boucle while en début de script ?
Et pourquoi pas plutôt une boucle while en début de script ?
i=0 while [ "$i" -lt 5 ] do ... ((i++)) done
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
11 févr. 2010 à 13:18
11 févr. 2010 à 13:18
Comme une démonstration vaut mieux qu'un long discours...
;-))
jp@MDK:~/tmpfs ssh$ ls f1 f2 foo.sh liste jp@MDK:~/tmpfs ssh$ cat foo.sh #! /bin/bash i=0 while [ "$i" -lt 5 ] do if [ $# -ne 1 ] ; then echo Il faut 1 parametre exit 1 fi if [ ! -f "$1" ] ; then echo Le 1er parametre doit etre un fichier exit 1 fi read fic1 fic2 fic3 < "$1" read nb1 < $fic1 read nb2 < $fic2 touch $fic3 echo $nb2 > $fic1 echo $nb1 > $fic2 res=`expr $nb1 + $nb2` read val < $fic3 if [ -z "$val" ] ; then echo $res > $fic3 else echo `expr $nb1 \* $val` > $fic3 fi ((i++)) done jp@MDK:~/tmpfs ssh$ cat liste f1 f2 f3 jp@MDK:~/tmpfs ssh$ cat f1 1 jp@MDK:~/tmpfs ssh$ cat f2 4 jp@MDK:~/tmpfs ssh$ chmod u+x foo.sh jp@MDK:~/tmpfs ssh$ ./foo.sh Il faut 1 parametre jp@MDK:~/tmpfs ssh$ ./foo.sh liste jp@MDK:~/tmpfs ssh$ ls f1 f2 f3 foo.sh* liste jp@MDK:~/tmpfs ssh$ cat f1 4 jp@MDK:~/tmpfs ssh$ cat f2 1 jp@MDK:~/tmpfs ssh$ cat f3 80 jp@MDK:~/tmpfs ssh$
;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
bernard
11 févr. 2010 à 13:44
11 févr. 2010 à 13:44
Pas avec des "sleep" mais avec la commande "wait".
En enlevant la boucle "while" du script (ce que j'ai rajouté en fait) et en lançant les commandes comme suit :
;-))
En enlevant la boucle "while" du script (ce que j'ai rajouté en fait) et en lançant les commandes comme suit :
jp@MDK:~/tmpfs ssh$ ./foo.sh liste& wait;./foo.sh liste& wait;./foo.sh liste& wait;./foo.sh liste& wait;./foo.sh liste& wait; [1] 5085 [1]+ Done ./foo.sh liste [1] 5088 [1]+ Done ./foo.sh liste [1] 5092 [1]+ Done ./foo.sh liste [1] 5096 [1]+ Done ./foo.sh liste [1] 5100 jp@MDK:~/tmpfs ssh$ ls f1 f2 f3 foo.sh* liste jp@MDK:~/tmpfs ssh$ cat f1 4 jp@MDK:~/tmpfs ssh$ cat f2 1 jp@MDK:~/tmpfs ssh$ cat f3 80 jp@MDK:~/tmpfs ssh$
;-))
bernard
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
11 févr. 2010 à 13:56
11 févr. 2010 à 13:56
ton while permet du parallélisme entre l'éxécution des scripts tu es d'accord?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
bernard
11 févr. 2010 à 17:48
11 févr. 2010 à 17:48
Euh... non ;-\
Le while c'est du séquentiel. Même la commande utilisant "&" et "wait" c'est aussi du séquentiel dans la mesure où chaque nouvelle commande "wait" attend l'achèvement de la dernière tâche de fond lancée (&) pour exécuter la prochaine.
Pour ce que tu veux faire, le parallélisme n'est pas possible dans la mesure où chaque script lancée est tributaire du précédent (du moins dans ce que tu veux obtenir au final) ;-\
Le while c'est du séquentiel. Même la commande utilisant "&" et "wait" c'est aussi du séquentiel dans la mesure où chaque nouvelle commande "wait" attend l'achèvement de la dernière tâche de fond lancée (&) pour exécuter la prochaine.
Pour ce que tu veux faire, le parallélisme n'est pas possible dans la mesure où chaque script lancée est tributaire du précédent (du moins dans ce que tu veux obtenir au final) ;-\
bernard
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
15 févr. 2010 à 23:17
15 févr. 2010 à 23:17
excuse moi jipicy mais ton script ne marche pas je suis dsl, j'ai beau l'essayer depuis 1 heure de différente manière rien n'y fait, en voici la preuve:
bernard@moi:~$ echo 1 > f1 ; echo 4 > f2 ; cat liste
f1 f2 f3
bernard@moi:~$ ./exo.sh liste & ./exo.sh liste& ./exo.sh liste& ./exo.sh liste& ./exo.sh liste
[1] 4392
[2] 4393
[3] 4394
[4] 4395
[1] Done ./exo.sh liste
[2] Done ./exo.sh liste
[3]- Done ./exo.sh liste
[4]+ Done ./exo.sh liste
bernard@moi:~$ cat f1
4
bernard@moi:~$ cat f2
1
bernard@moi:~$ cat f3
5120
je ne veux pas 5120 mais 80, et avec exactement la commande que j'ai donné et j'ai essayé 10 fois ton script et rien n'y fait, je me demande comment toi tu as faire pour obtenir le 80 vu qu'on utilise le même script
bernard@moi:~$ echo 1 > f1 ; echo 4 > f2 ; cat liste
f1 f2 f3
bernard@moi:~$ ./exo.sh liste & ./exo.sh liste& ./exo.sh liste& ./exo.sh liste& ./exo.sh liste
[1] 4392
[2] 4393
[3] 4394
[4] 4395
[1] Done ./exo.sh liste
[2] Done ./exo.sh liste
[3]- Done ./exo.sh liste
[4]+ Done ./exo.sh liste
bernard@moi:~$ cat f1
4
bernard@moi:~$ cat f2
1
bernard@moi:~$ cat f3
5120
je ne veux pas 5120 mais 80, et avec exactement la commande que j'ai donné et j'ai essayé 10 fois ton script et rien n'y fait, je me demande comment toi tu as faire pour obtenir le 80 vu qu'on utilise le même script
11 févr. 2010 à 13:09
./script.sh liste & ./script.sh liste& ./script.sh liste& ./script.sh liste& ./script.sh liste
(tu remarques il y a 4 &), donc 4 scripts qui s'éxécutent en parallèle et 1 normalement. Avec cette commande je souhaite obtenir f1=4 f2=1 f3=80.
Je pense en lisant mon livre que je dois utiliser des instructions sleep et de synchronisations, je ne vois pas l'utilité du while ici...?