CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

boucle while

aodren
aodren
Niveau 10
10 novembre 2010 à 12:05:51

salut a tous !

je m'intéresse aux boucles dont j'ai trouvé ce brève tuto http://www.tuteurs.ens.fr/unix/shell/boucle.html

j'ai trouvé ceci sur le net : #!/bin/bash
http://www.linuxquestions.org/questions/linux-general-1/taking-auto-screenshots-using-cronjobs-289335/#post1467359

rien qu'a lire vous savez de quoi il en retourne.
j'ai effacé les lignes comportant "echo" et "stop" et j'ai remplacé la ligne while par

while [ $now ] ; do

seule chose, je voulais savoir ce que fait $now exactement.

j'ai peur qu'il arrête la boucle a la minute d'après. et vu qu'en supprimant $now, il me retourne un message d'erreur, j'ai donc remplacer la commande date par
`date +%F`

ou $now n'a aucune action réel? genre juste pour démarrer la boucle par exemple.

Merci de vos conseils

chris_27
chris_27
Niveau 10
10 novembre 2010 à 12:34:06

1) j'ai rien compris

while [ $now ] ; do :d) ça c'est du code trivial : soit $now est non défini et il ne se passe rien, soit $now est défini et ça boucle ad vitam eternam. Heureusement, ce n'est pas ça qui est utilisé dans l'exemple que tu pointes.

2) l'exemple que tu pointes me paraît être un cas typique où on veut utiliser cron.

3) pourquoi te jètes-tu sur la boucle while alors que c'est la boucle la plus dure et la moins utile ? :question:
Beaucoup de gens font ça, et j'aimerais vraiment savoir pourquoi. :(

Dargor
Dargor
Niveau 10
10 novembre 2010 à 12:40:30

Chris > C'est probablement la plus intuitive pour un moldu.

Sinon #!/bin/sh, pas bash.

aodren
aodren
Niveau 10
10 novembre 2010 à 12:51:41

Quel est la meilleur boucle a utiliser?

et connaissez vous des tutos bien plus complet?

Sinon chris voici mes modifs de cette boucle.

http://pastebin.com/Ug1kJ8Nn

et en effet ca fonctionne avec crond.

chris_27
chris_27
Niveau 10
10 novembre 2010 à 13:11:28

Dargor : Tu vas me dire que le moldu qui fait ses courses il raisonne en « tant qu'il reste un rayon j'avance » plutôt qu'en « je parcours chaque rayon 1 à 1 » ? :doute:

Sinon, merci pour la remarque sur /bin/sh, j'avais la flemme de rabâcher ça encore une fois.

aodren: ton code est complètement foireux.

ligne 1: /bin/sh on t'a dit ! /bin/bash, ça rend impuissant.
(NB: finalement, j'ai quand même fini par le rabâcher)

ligne 4: ton test est complètement foireux. Il sera toujours vrai, cf mon précédent message. Pour les détails, sur ce qu'on peut mettre entre les [], voir :
$ man test
Au passage, [ c'est un alias pour la commande test dans ce contexte.

ligne 8: commentaire (presque) inutile

ligne 10: on n'est plus en 1990, on sait faire autre chose que du .xwd dans la vie.

ligne 11: cette ligne ne sert à rien a priori (sauf à faire méchamment laguer ta machine car convert c'est pas une petite commande de Mickey qui termine en 3ms). Si vraiment tu veux des .jpg à la fin, fais les convert après coup.
ligne 12: même remarque qu'à la ligne 11, fais ça après la boucle.

ligne 15: sleep 0.5s :d) à cette cadence, ta machine va morfler.

Bref, ma conclusion est la suivante :
:d) l'idée d'utiliser la commande import comme cela est fait dans le commentaire est judicieuse.
:d) utiliser recordmydesktop pour faire ce que tu es en train de faire, ça marchera 1000 fois mieux, et c'est nettement plus simple.

PS: j'avoue, je viens de découvrir que sleep pouvait prendre un nombre flottant de secondes en entrée.

chris_27
chris_27
Niveau 10
10 novembre 2010 à 13:24:38

Pour répondre à la question sur le "meilleure" boucle, regardons les bootscripts :

$ grep -e while /etc/init.d/* | grep -v "#" | wc -l
15

Parmi ces 15 while, on a :
$ grep -e "while read" /etc/init.d/* | grep -v "#" | wc -l
10

donc 10 "while read", ce qui est le seul cas classique qui me vient à l'esprit pour lequel on a envie d'utiliser un while plutôt qu'un for. Il reste donc 5 vraies boucles while.

À côté de ça, on a 58 boucles for :

$ grep -e "for " /etc/init.d/* | grep -v "#" | wc -l
58

(et même un peu plus, j'en ai perdu quelques unes à cause du grep -v).

Bref, les barbus utilisent majoritairement des boucles for et des "while read".

Dargor
Dargor
Niveau 10
10 novembre 2010 à 16:00:25

Dargor : Tu vas me dire que le moldu qui fait ses courses il raisonne en « tant qu'il reste un rayon j'avance » plutôt qu'en « je parcours chaque rayon 1 à 1 » ? :doute:

Oui : il n'a pas compté les rayons à l'avance :o))

Plus sérieusement j'en sais rien, ce n'était qu'une hypothèse : le while me semble conceptuellement plus simple/intuitif.

chris_27
chris_27
Niveau 10
10 novembre 2010 à 16:13:43

Pas besoin de compter les rayons : On sait qu'il y en a un certain nombre N fixe, donc « for i from 1 to N do ... done ». :sournois:

De manière générale, la boucle for fournit une syntaxe naturelle pour faire un parcours linéaire (suite d'entiers, liste finie, etc.). C'est quand même conceptuellement plus simple que le while où tout peut se passer, non ? :(

Dargor
Dargor
Niveau 10
10 novembre 2010 à 16:29:42

Tu ne raisonnes pas comme le moldu moyen :o)) Quand j'ai tenté d'expliquer ce genre de choses, le while semblait avoir plus de succès. Après ça dépend du public, je parle de gens pour qui ordinateur = magie :)

hplovecraft
hplovecraft
Niveau 10
10 novembre 2010 à 16:48:10

C'était mon cas lors de ma première approche de la prog, à défaut de savoir quand et pourquoi se servir de for, j'utilisais while car plus intuitive, sans doute une question de syntaxe;

chris_27
chris_27
Niveau 10
10 novembre 2010 à 16:56:30

Pour avoir vu 90% des élèves utilisant le while oublier plusieurs fois par TD un élément de la boucle (initialisation ou incrément de la variable servant pour le test au niveau du while), j'émets un doute sur l'intuitivité de la syntaxe du while. :(

aodren
aodren
Niveau 10
10 novembre 2010 à 20:49:06

j'ai rien saisi de ce que vous me dites...

a savoir que ce "while", je n'ai fait que le repomper et que j'y connais rien...

sinon recordmydesktop est visible en fonctionnement et qu'en plus fonctionne moins bien que ce script.

allez, je te fait une vidéo, tu comprendra mieux.
http://www.youtube.com/watch?v=PWoJ3LdYsWA

chris_27
chris_27
Niveau 10
10 novembre 2010 à 21:04:13

aodren : non, tu n'as pas fait que le repomper. Tu l'as adapté, et très mal car tu as oublié la partie essentielle de ce qu'il y avait entre les [] (la partie qui fait que la boucle a du sens).

« sinon recordmydesktop est visible en fonctionnement »
:d) et ton dump + convert toutes les 0.5 secondes est audible. Avec toutes les ressources que ça bouffe, n'espère pas une seule seconde passer inaperçu.

Par ailleurs, recordmydesktop marche beaucoup mieux que ça (essayer sur mon laptop avec son chipset intel niveau 0). Donc je te conseille de réessayer sur une machine clean (qui vient juste de booter, et sur laquelle tu n'auras pas lancé de scripts louches de ta fabrication ou repompés bêtement sur internet).

Enfin, dis nous clairement ce que tu cherches à faire à la base (mais alors vraiment à la base). Parce que pour en arriver au script que tu nous as montré, tu as du louper plusieurs éléments clés.

aodren
aodren
Niveau 10
10 novembre 2010 à 21:23:04

alors recordmydesktop me crash l'ordi si j'ai le malheure d'afficher le cube.

en suite je veux faire des screenshot le plus vite possible (ici dans ce cas 2/secondes)

et un moyen avec $num et quand je relance le script 2 jours après, je voudrais éviter de remplacer les num.jpg existant. car avec ce script il me remplace les fichiers existant.

aodren
aodren
Niveau 10
10 novembre 2010 à 21:29:23

PS : des screenshot qui n'affiche aucun détail sur l'écran lors de l'utilisation de l'ordinateur.

chris_27
chris_27
Niveau 10
10 novembre 2010 à 21:31:52

« alors recordmydesktop me crash l'ordi si j'ai le malheure d'afficher le cube. » :d) non, c'est compiz qui crache comme une merde en présence de recordmydesktop plutôt.

« en suite je veux faire des screenshot le plus vite possible (ici dans ce cas 2/secondes) » :d) non, ça c'est que tu as décidé de faire après ton 3ème virage. Ça n'a pas de sens de faire çà hors contexte. Tu dois bien avoir une vraie raison de faire ça (autre que de faire fondre ton CPU).

dnob700
dnob700
Niveau 10
10 novembre 2010 à 21:39:19

"Pour avoir vu 90% des élèves utilisant le while oublier plusieurs fois par TD un élément de la boucle (initialisation ou incrément de la variable servant pour le test au niveau du while), j'émets un doute sur l'intuitivité de la syntaxe du while."

Je ne crois pas que ce soit incompatible avec le reste : ils ne savent pas s'en servir, mais c'est de ça dont ils veulent se servir. Précisément parce qu'ils peuvent oublier plein d'élément de la boucle (généralement surtout l'incrément), tandis qu'avec une boucle for ils seraient obligés de penser à tout (ils voient donc ça comme un élément de complexité, plutôt que comme une aide, exactement comme les gens qui croient qu'un type-checker est là pour les embêter).

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware