#1 Le 13/07/2007, à 17:44
- Sleipnir
[Résolu] Besoin de conseil sur les fonctions et les boucles
Bonjour,
Dans la serie "questions de newbies":
j'ai un script ( tjrs personne pour tester sur le neuf...) j'y ajoute des trucs.
Voila le probleme, ou la question plutot:
#!/bin/bash
function choix ()
{
bla bla bla bla....
}
function television ()
{
blablanla
function
blabla
if ; then
vlc 1 &
exit
else
vlc 2 &
television
}
television
exit
C'est grave docteur si tout le code tiens principalement dans une fonction ? En fait, je lance juste une fois television et si...., je retourne au debut de television. C'est une boucle "fait maison", il y a bien , while ou autre pour les boucles, mais je maitrise pas encore bien ( pas du tout meme) !
Ca fonctionne correctement "ma facon", si c'est pas une injure a la programmation, on va pas s'embeter !
merci
Dernière modification par Sleipnir (Le 16/07/2007, à 12:02)
Hors ligne
#2 Le 13/07/2007, à 18:53
- loloemr
Re : [Résolu] Besoin de conseil sur les fonctions et les boucles
Je veux bien t'aider mais j'ai pas compris ce que tu veux faire avec ton script ?
L'open source est garant de notre indépendance technologique, permet de créer des emplois locaux et véhiculent deux idées fondamentales : la transparence de l'information et la supériorité de la collaboration sur la concurrence ... GNU/Linux c'est bon mangez-en !!
Hors ligne
#3 Le 15/07/2007, à 00:04
- alexduf
Re : [Résolu] Besoin de conseil sur les fonctions et les boucles
le probleme en faisant ca c'est que tu risques d'avoir un nombre de processus considerables !
a chaque fois que tu lance une fonction en shell, elle est lancée dans un nouveau processus shell (bash dans ton cas) tu auras donc autant de bash que tu es passé dans ta boucle.
utilise plutot
while [ condition ]; do
maFonction
done
c'est plus simple à relire à maintenir et moins méchant pour ton système ;-)
Hors ligne
#4 Le 15/07/2007, à 13:58
- Sleipnir
Re : [Résolu] Besoin de conseil sur les fonctions et les boucles
a chaque fois que tu lance une fonction en shell, elle est lancée dans un nouveau processus shell (bash dans ton cas) tu auras donc autant de bash que tu es passé dans ta boucle.
Ah bin ! Il faut donc éviter d'utiliser les fonctions alors ? Si j'ai 10 fonctions, 10 shell ? Ou alors des fonctions "passageres", elles verifient qqlchose et s'en vont ( si il y a "exit" en bout de fonction, elle devrait sortir du process, non ? )... Ou alors il faudrait "tuer" le dernier shell?
J'ai vu une commande qui permettait de retourner a une variable ( je ne la retrouve pas ! )
utilise plutot
while [ condition ]; do maFonction done
c'est plus simple à relire à maintenir et moins méchant pour ton système ;-)
Je vais m'u interesser serieusement à ces boucles, je vais devoir revoir le deroulement du script en entier, c'est pas plus mal, ca me fait connaitre le bash et ses mysteres !
merci
edit: j'ai essayé et "ma boucle" ne lance pas de nouveau process, c'est zenity qui est appelé par la fonction, il est tuer et relancé a chaque fois, peut etre je me trompe....
Dernière modification par Sleipnir (Le 15/07/2007, à 14:20)
Hors ligne
#5 Le 15/07/2007, à 21:28
- alexduf
Re : [Résolu] Besoin de conseil sur les fonctions et les boucles
Ah bin ! Il faut donc éviter d'utiliser les fonctions alors ? Si j'ai 10 fonctions, 10 shell ? Ou alors des fonctions "passageres", elles verifient qqlchose et s'en vont ( si il y a "exit" en bout de fonction, elle devrait sortir du process, non ? )... Ou alors il faudrait "tuer" le dernier shell?
les process lancés lors de l'appel a une fonction se terminent à la fin de la fonction. Donc si t'as une boucle avec une fonction appelée, tu auras au max deux process qui tournent (un pour la boucle, un pour ta fonction)
le probleme de ton code c'est que ta fonction se rappelle elle-même, ta fonction est appellée un première fois, appelle une nouvelle fonction (elle-même pour le coup) et ne se termine pas tant que la fonction appellée n'est pas terminée.
donc ca donne un truc comme ca :
1 :
script lancé
appel de ta fonction
2:
script lancé
appel de ta fonction
qui appelle une nouvelle fonction
3:
script lancé
appel de ta fonction
qui appelle une nouvelle fonction
qui appelle une nouvelle fonction
4:
script lancé
appel de ta fonction
qui appelle une nouvelle fonction
qui appelle une nouvelle fonction
etc...
alors qu'avec une boucle
1:
script lancé
appel de ta fonction
2: (la fonction est terminée)
script lancé
3: (un nouveau tour de boucle commence)
script lancé
appel de ta fonction
4:
etc...
je sais pas si c'est très clair mais j'espère que ca t'aideras
Hors ligne
#6 Le 16/07/2007, à 09:58
- gene69
Re : [Résolu] Besoin de conseil sur les fonctions et les boucles
C'est grave docteur si tout le code tiens principalement dans une fonction ? En fait, je lance juste une fois television et si...., je retourne au debut de television. C'est une boucle "fait maison", il y a bien , while ou autre pour les boucles, mais je maitrise pas encore bien ( pas du tout meme) !
non ce n'est pas grave algorithmiquement. Il y a des tas de languages ou c'est l'unique solution pour obtenir un effet boucle. Sauf que là, en bash c'est pas adapter, parce que ta boucle, au lieu de boucler simplement va démultiplier le nombre d'instance...
En fait si, du point de vue de l'algo ya un problème: il n'y a pas de condition de sortie... boucle infinie alors que l'ordinateur a une capacité finie...
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#7 Le 16/07/2007, à 12:02
- Sleipnir
Re : [Résolu] Besoin de conseil sur les fonctions et les boucles
c'est plus clair maintenant !
J'ai donc utilisé un boucle until. Le code est plus propre et s'execute plus rapidement, tout bénéf quoi !
Merci
Hors ligne