Forum Programmation.shell Unix, pipelines

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-8
1
juil.
2024

Bonsoir;
y a t il quelqu'un qui pourrait m'aider à résoudre cet exercice
The weather.sh utility in the current working directory provides weather forecasts in your area. When called, it outputs a 4-day forecast in the format "day: weather" separated by line breaks.
Write a bash script that outputs the number of days with a "Thunderstorm" forecast (case- sensitive).

  • # facile

    Posté par  (site web personnel) . Évalué à 10.

    Oui, c'est très facile. Pour commencer il te faut un système d'exploitation. Je te suggère LFS, c'est le mieux pour apprendre : https://www.linuxfromscratch.org/lfs/download.html

    Une fois que tu aura installé LFS tu devrais avoir acquis les connaissances nécessaires pour résoudre le problème.

    Joyeux amusement.

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

    • [^] # Re: facile

      Posté par  . Évalué à 1. Dernière modification le 02 juillet 2024 à 07:19.

      je vous remercie énormément, pour le lFS je le suis pas à pas pour construire ma propre distribution, main ici je vais passer un test dans 2 jours, et j'ai trouvé cet exercice qui est classé comme difficile.
      j'ai réussi à le resoude de 33% (le score à la fin) :

      #!/bin/bash
      
      forecast=$(./weather.sh)
      
      # Compter le nombre de jours avec une prévision de "Thunderstorm"
      thunderstorm_count=$(echo "$forecast" | grep -c "Thunderstorm")
      
      # Afficher le nombre
      
      if [ $thunderstorm_count -eq 0 ]; then
          echo "No days with thunderstorms"
      elif [ $thunderstorm_count -eq 4 ]; then
          echo "Toute la semaine avec des thunderstorms"
      else
          echo "Number of days with Thunderstorm forecast: $thunderstorm_count"
      fi

      mais je ne sais pas pourquoi il n'est pas juste à 100%, ça fait des jours de tentatives de résolution, mais aucune autre idée

      • [^] # Re: facile

        Posté par  . Évalué à 6.

        le debug du pauvre, affiche le resultat de ton "thunderstorm_count"

        ainsi tu sauras ce qu'il y a dedans, ensuite regarde tes conditions…

        accessoirement fait toi un jeu de test ou tu maitrises l'entrée (ex un fichier ressemblant à la sortie de weather.sh, mais qui t'appartient et que tu peux modifier librement

        ainsi tu testes avec toujours le meme fichier pour etre sur d'avoir la meme entrée, et donc logiquement la meme sortie

      • [^] # Re: facile

        Posté par  . Évalué à 3.

        if [ $thunderstorm_count -eq 0 ]

        Pour les tests. Qu’on me corrige si je me trompe, mais tu as intérêt à systématiquement utiliser [[ au lieu de [, car [[ est un keyword et non un builtin comme est [.

        Le comportement est plus logique, plus prévisible, « moins possiblement chelou » oserais-je.

        https://askubuntu.com/questions/445749/whats-the-difference-between-shell-builtin-and-shell-keyword

        Donc autant écrire : if [[ $thunderstorm_count -eq 0 ]]. Même si ici ça revient au même, il n’y a aucun intérêt à utiliser [, donc autant prendre cette habitude.

  • # Voir aussi

    Posté par  (site web personnel, Mastodon) . Évalué à 5. Dernière modification le 01 juillet 2024 à 21:47.

    Ceete page du wiki notamment le paragraphe : "Aidez-moi à faire cet exercice, c'est pour hier !".

    « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

    • [^] # Re: Voir aussi

      Posté par  . Évalué à 1.

      merci, mais ici ça fait des jours que je stagne sur cet exercice, peu de gens ont pu résoudre cet exercice et je tente ma chance si kelk un parmi eux passe par là

      • [^] # Re: Voir aussi

        Posté par  . Évalué à 3.

        Alors ? T’as réussi à briller, ou au moins à faire illusion ? Ou bien tu t’es pris des coups de règle sur les doigts et tu as été condamné à recopier des pages de manuel ? ;)

  • # Consigne

    Posté par  . Évalué à 2.

    Une idée comme ça… la consigne est :

    outputs the number of days with a "Thunderstorm" forecast

    Et non pas :

    outputs the number of days with a "Thunderstorm" forecast, unless it's 0 or 4.

    • [^] # Re: Consigne

      Posté par  . Évalué à 1. Dernière modification le 01 juillet 2024 à 23:26.

      merci pour votre réponse mais je n'ai pas compris votre raisonnement
      else
      echo "Number of days with Thunderstorm forecast: $thunderstorm_count"
      traite les autres cas

      • [^] # Re: Consigne

        Posté par  . Évalué à 7. Dernière modification le 01 juillet 2024 à 23:46.

        C'est bien plus simple : il faut afficher le nombre de fois qu'on trouve Thunderstorm. C'est tout. Rien d'autre. Juste un nombre. Pas des phrases. J'ai pu vérifier en faisant le test est j'ai eu 100% (nananère).

        Pourquoi est-ce important de suivre la consigne ? Parce qu'en programmation, on défini des formats, des interfaces, des types de données, pour pouvoir les traiter et faire des opérations avec sans surprise.

        Imagine que tu fais un truc qui compte les carottes dans ton garde-manger, et qui détermine combien de carottes tu dois acheter pour en avoir 10 :

        carottes_a_acheter = 10 - carottes_dans_le_garde_manger
        

        Si carottes_dans_le_garde_manger vaut aucune au lieu de 0, ben ta soustraction ne va pas fonctionner, ton programme va planter et tu vas crever de faim.

        Donc simplifie ton programme et croque une carotte :).

        • [^] # Re: Consigne

          Posté par  . Évalué à 2.

          merci énormément pour votre réponse mais j'ai essayé toute la première fois d'afficher seulement la variable $thunderstorm_count, c'est pour cette raison que j'ai fait plusieurs modifications pour résoudre la question à 100%
          il m'affiche que le script ne marche pas en cas
          * The forecast contains no thunderstorms: Wrong answer
          *The forecast contains some thunderstorms: Wrong answer
          alors que j'ai essayé mon script sur plusieurs cas, en cas de 0 ou plusieurs jours de thunderstorm et il fonctionne très bien, mais toujours j'obtiens un score de 33%

          • [^] # Re: Consigne

            Posté par  (site web personnel) . Évalué à 2. Dernière modification le 02 juillet 2024 à 00:20.

            pourquoi se compliquer la vie ? c'est un one-liner trivial

            il faut simplement sortir le chiffre obtenu… et hop, 100%

            • [^] # Re: Consigne

              Posté par  . Évalué à 1.

              merci pour vous, enfin j'ai eu 100%

            • [^] # Re: Consigne

              Posté par  . Évalué à 3.

              Oui, sauf que sur le site de test…

              Ce programme fonctionne :

              #!/bin/bash
              
              ./weather.sh | grep -c Thunderstorm
              

              Et celui-ci ne fonctionne pas, mais fonctionne bien sur ma machine :

              #!/bin/bash
              
              weather="$(./weather.sh)"
              count=$(echo "$weather" | grep -c Thunderstorm)
              echo $count
              

              Du coup je pense que shella a buté sur un bête bug du site de test. Pas cool.

              Bon courage pour la suite !

              • [^] # Re: Consigne

                Posté par  (site web personnel) . Évalué à 4. Dernière modification le 02 juillet 2024 à 00:45.

                bin faire exécuter le contenu d'une variable c'est toujours casse-gueule à échapper selon que c'est utilisé directement dans le shell en ligne de commande, exécuté dans un script shell ou appelé par un autre script shell ou encore dans le cron… tu passes ton temps à mettre des \ de partout :/

                • [^] # Re: Consigne

                  Posté par  . Évalué à 1.

                  Encore une fois, merci du fond du cœur.

                  Avec toute ma gratitude

                  • [^] # Re: Consigne

                    Posté par  (site web personnel) . Évalué à 3.

                    boah, la prochaine fois, indique testdome tout de même et entraîne-toi à citer du code en Markdown comme indiqué sur le wiki aide-édition code — même si la modération est passée par là pour éditer ton commentaire ;-)

                    d'ailleurs, si tu as envie de lister les plateformes sur lesquelles tu t'entraînes, ce sera la bienvenue :p (même si cg< a été capable de le retrouver…) ; tu peux les lister à la fin de ton entrée de forum (que tu peux éditer).

                    • [^] # Re: Consigne

                      Posté par  . Évalué à 1.

                      je vous remercie pour votre temps et votre empathie

                    • [^] # Re: Consigne

                      Posté par  . Évalué à 2.

                      Tiens, ça fait plusieurs fois que je vois des noms d'utilisateurs suivi d'un <, ça me rend curieux. Je comprend que c'est l'équivalent du @ utilisé sur Mastodon, mais sur Linuxfr, ça sert à quoi ?

                      • [^] # Re: Consigne

                        Posté par  (site web personnel) . Évalué à 2.

                        J'imagine que certains clients de tribune reconnaissent cette syntaxe https://linuxfr.org/wiki/tribune

                        pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

                      • [^] # Re: Consigne

                        Posté par  (site web personnel) . Évalué à 3.

                        Je comprend que c'est l'équivalent du @ utilisé sur Mastodon, mais sur Linuxfr, ça sert à quoi ?

                        c'est le @ qui est l'équivalent du bec du canard \_o< qu'on rencontre pas mal sur IRC, permettant de faire allusion à quelqu'un ;-)

                        ça ne sert à rien, donc totalement indispensable ! :p

                        • [^] # Re: Consigne

                          Posté par  (site web personnel) . Évalué à 3.

                          bec du canard _o< qu'on rencontre pas mal sur IRC

                          {{référence nécessaire}}

                          Je suis sur IRC depuis des dizaines d'années et je n'ai vu cette utilisation que sur la tribune.

                          pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

                          • [^] # Re: Consigne

                            Posté par  (site web personnel) . Évalué à 2.

                            pan ! pan !

                            (nope, ce n'est pas que sur la 3bune : comment crois-tu que ça y est arrivé ?)

                          • [^] # Re: Consigne

                            Posté par  . Évalué à 3.

                            J’y étais il y a des dizaines d’années pour ma part (sur IRC) et je n’ai pas souvenir du < final pour signifier un nickname/pseudo/personne, mais bien le @, qui entre nous est nettement plus logique. Le < final c’est quand même pas très évident.

                            Si je m’identifie à une moule plus qu’à un canard, puis-je exiger qu’on userait le cas échéant d’un ( final à la place ? Je crois que le symbole n’est pas réservé en tant que suffixe à un nom. Je vais initier une RFC avant qu’Elon Musk ou Bill Gates s’en empare !

                            L’IRC… c’est comme Usenet, ça fait plaisir de voir que ça existe toujours, faudrait que j’y refasse un tour un de ces quatre. Ça ne m’étonne pas de voir qu’aujourd’hui encore des gens (ils sont pas des masses quand même àmha…) privilégient ce genre de protocol, pour ses qualités, et malgré ses défauts.

                            Je dis p-e une connerie mais IRC subsiste davantage qu’ICQ qui prétendait pourtant a être un avantageux remplaçant de l’archaïque IRC, non ?

                            • [^] # Re: Consigne

                              Posté par  (site web personnel) . Évalué à 3. Dernière modification le 08 août 2024 à 05:45.

                              Traditionnellement le @ sur IRC est un préfixe indiquant un status spécial visible dans le liste des participants mais on ne l'utilise pas lorsque l'on interpelle quelqu'un. Dans les clients IRCs que j'ai utilisé, on a autocomplete et un système de « highlight » lorsque son propre nom est mentionné sans avoir besoin de préfixe (souvent on a un « : » entre le nom du destinataire et le message).

                              Je dis p-e une connerie mais IRC subsiste davantage qu’ICQ qui prétendait pourtant a être un avantageux remplaçant de l’archaïque IRC, non ?

                              ICQ était entièrement contrôlé par une société privée. IRC est un protocole ouvert. Un des deux est beaucoup plus facile à éradiquer que l'autre.

                              pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

                            • [^] # Re: Consigne

                              Posté par  (site web personnel) . Évalué à 4.

                              Je dis p-e une connerie mais IRC subsiste davantage qu’ICQ qui prétendait pourtant a être un avantageux remplaçant de l’archaïque IRC, non ?

                              Je ne sais pas trancher si c'est une connerie ou pas, mais on est en août et de fait c'est vrai, faute de concurrence, IRC gagne ce match.
                              https://linuxfr.org/users/devnewton/journaux/icq-sera-bronsonise-fin-juin

                • [^] # Re: Consigne

                  Posté par  . Évalué à 4.

                  faire exécuter le contenu d'une variable

                  C’est la substitution de commande (ie: $(command)) que tu désignes ainsi ?

                  Perso ça m’évoque plus un recours au builtin eval cette formulation.

                  tu passes ton temps à mettre des \ de partout

                  De mon expérience, sur l’échappement :

                  • Un \ ça va, c’est souvent même très utile et élégant.

                  • Deux \\, il y a un forte probabilité qu’il existe un meilleur moyen de faire ce que tu souhaites.

                  • Trois \\\, le code est mauvais, il est crucial de prendre un peu de repos, puis le temps de la réflexion pour récrire toute la partie du code concernée.

                  J’en profite pour évoquer quelque chose que j’ai appris trop tard dans mon apprentissage du shell, Bash en l’occurrence. Je ne sais pas pour KSH, ZSH ou la norme POSIX, mais je pense qu’il existe de semblables subtilités.

                  Il n’y a pas moins de 4 façons de valoriser une variable « scalaire » (ie: hors tableau et nameref), et pour lesquelles le caractère anti-slash, entre autre, n’a pas le même comportement :

                  toto=valeur
                  toto="valeur"
                  toto='valeur'
                  toto=$"valeur"
                  toto=$'valeur'
                  

                  Le manuel vous l’expliquera assurément mieux que moi ! ^^

        • [^] # Re: Consigne

          Posté par  . Évalué à 4. Dernière modification le 08 août 2024 à 04:38.

          Tu me rappelles une leçon que j’ai eu la chance de recevoir, concernant le respect des consignes.

          On donne une feuille aux élèves en leur disant qu’il s’agit de l’exercice à faire, qu’ils ont X minutes pour le remplir. La consigne écrite en haut de la feuille indique de « lire l’ensemble des questions, puis de répondre ». Je crois qu’à peu prêt 100% des sujets commence à lire la première question, commence à y réfléchir et y répondre (moi le premier). Le fait est que répondre à toute les questions, aussi peu complexes qu’elles soient, est impossible dans le temps imparti. Or à la fin des questions, au bas du verso de la feuille, il est écrit : « Répondez seulement aux questions 1, 3 et 5 et rendez votre copie. »

          C’est évidemment volontairement caricatural, mais pour ma part je trouve que c’est un des enseignement fondamental que j’ai eu la chance de recevoir. À quelque chose comme 25 ans, alors que ce réflexe, de “read all the fucking instructions first, before acting” ça devrait être assimilé dès le CP… (Bon, p-e qu’on avait essayé de me l’inculquer déjà à cette époque et que j’ai loupé le coche, mais franchement, si c’est le cas on a pas dû essayer très fort ! ^^)

          Dans la même veine il y a un exercice sur « comment négocier avec un concurrent », et bien là aussi la clé pour réussir cet exercice c’est que les deux équipes qui se font concurrence lisent très précisément chaque mot du mandat qu’on leur a confié.

  • # man grep

    Posté par  . Évalué à 2.

    .

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.