Forum Linux.débutant Question

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-2
21
oct.
2019

Bonjour,

Mon objectif serais de récupérer des valeurs de pings qui sont stockés dans un fichier texte à côté du script shell. Pour ensuite les stocker dans des variables Ping1, Ping2…

Dans le fichiers qui stocke les valeurs de pings cela s'affiche ainsi :

2
3
2
3
3

Mais je 'arrive pas à le faire pouvez m'aider ?

  • # qu'es-ton supposé comprendre ?

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

    Sooooo, on est sensé comprendre quoi du dump ? qu'est que tu veut exactement ?

    Un truc du genre:
    ping1=2
    ping2=3
    ping3=2
    ping4=4
    ..

    ? (si oui ça va être inutilisable, charge plutot ton fichier dans un tableau par exemple)

    declare -a pings
    
    while read pv; do
      pings+=($pv)
    done < /path/to/pings
    
    # do something:
    echo ${pings[1]}
  • # La saison des TPs est repartie…

    Posté par  . Évalué à 10.

    Nouveau compte, aucune réflexion… c’est reparti pour un tour.

    Quelques conseil quand même :

    • Avoir l’honnêteté de dire : « Je suis une bille, voilà mon TP, pouvez vous me le faire ? ».
    • Présenter l’énoncé complet.
    • Proposer une première solution sur laquelle on peut discuter.
    • etc.
  • # Compléments

    Posté par  . Évalué à 1.

    Bonjour,
    Merci de vos réponses.

    Désolé de ne pas avoir assez détaillé et de débuter en bash.
    Du coup c'est un mini projet dans lequel on va ping et télécharger un site dans mon cas "Ac-Nantes.fr"il faut faire ça toutes les heures puis enregistrer la moyenne de chaque jour afin après au bout d'une semaine il faut envoyer un mail dans lequel on trouve un tableau avec la moyenne de tous les jours.

    Pour le moment j'ai donc réussi à tout faire individuelement sauf le stockage des pings.

    Pouvez vous me dire pour vous me conseillerez plus de stocker mes données dans un tableau ?

    Merci de votre aide.

    • [^] # Re: Compléments

      Posté par  . Évalué à 2.

      Désolé mais je ne comprends toujours pas le but de ce que tu veux faire …

      Ca veut dire quoi "on va ping et télécharger un site" ?

      il faut faire ça toutes les heures

      Tu fais un ping par heure c'est ça ? Ou un téléchargement ?

      enregistrer la moyenne de chaque jour

      La moyenne de quoi ?

      au bout d'une semaine il faut envoyer un mail dans lequel on trouve un tableau avec la moyenne de tous les jours.

      La moyenne calculée précédemment ? Mais de quoi ?

      • [^] # Re: Compléments

        Posté par  . Évalué à 2.

        Je crois que je commence à comprendre …

        Tu as un fichier qui contient un certain nombre de valeurs …
        Et tu veux calculer la moyenne ?

        Pas besoin. Il te suffit de définir une variable, ajouter à cette variable chaque valeur, puis diviser par le nombre de lignes, tu auras ta moyenne.

        voir while read ou for en shell:

        un truc du genre :

        SUM=0
        NB_LINE=0
        while read VAL
        do
        
          SUM=$((SUM+VAL))
          NB_LINE=$((NB_LINE+1))
        
        done < fichier
        
        SUM=$((SUM/NB_LINE))

        Pas testé, suis pas sûr que ça marche.

        Plus d'infois sur https://www.commentcamarche.net/faq/5027-comment-lire-un-fichier-ligne-par-ligne

        • [^] # Re: Compléments

          Posté par  . Évalué à 1.

          Rebonjour,

          Merci de votre réponse, votre code marche parfaitement.

          Vous avez compris l'idée, juste dernière petite question est ce que vous savez comment est ce que je pourrais récupérer les valeurs extrêmes (min et max) de cette série de pings ?

          • [^] # Re: Compléments

            Posté par  . Évalué à 4.

            Vous avez compris l'idée, juste dernière petite question est ce que vous savez comment est ce que je pourrais récupérer les valeurs extrêmes (min et max) de cette série de pings ?

            en lisant ton cours de shell pour lire une ligne, prendre certains mots…

          • [^] # Re: Compléments

            Posté par  . Évalué à 2.

            Avant la boucle, tu initialise une variable MIN et une variable MAX à 0

            Dans la boucle, tu testes :
            - si la valeur courante est supérieure à max, tu affectes la valeur courante a la variable MAX
            - si la valeur courante est inférieure a MIN, tu affectes la valeur courante a min.

            quelques infos :

            https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/43394-les-conditions
            https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/43394-les-conditions
            http://www.linux-france.org/article/dalox/unix04.htm#autre

            Attention, tu fais des tests numériques donc le test se fera avec "lt" ou "gt", pas avec "<" ou ">"

            • [^] # Re: Compléments

              Posté par  . Évalué à 3.

              Si tu initialises MIN à 0, il probable qu’elle soit encore à 0 à la fin ;-)

              Généralement on initialise min au max et max au min.

              • [^] # Re: Compléments

                Posté par  . Évalué à 2. Dernière modification le 24 octobre 2019 à 09:59.

                Effactivement, bien vu, j'ai répondu un peu vite (manque de pratique sur ce genre de choses depuis un bout de temps …).

                Quand je traite ce genre de cas, j'initialise min et max avec une des valeurs de la liste à traiter. Bien souvent j'extrait la première et j'initialise min et max à cette valeur.

                Il suffit donc de récupérer la première valeur du fichier (man head) et de l'affecter à la variable ( chercher la façon d'affecter la sortie standard d'une commande à une variable).

                Autre méthode: vu que dans notre cas on a un compteur sur le nombre de valeur traités on pourrait insérer une condition dans la boucle : si on traite la première ligne, on affecte la valeur courante à MIN et a MAX , sinon on fait comme j'ai dit plus haut (comparaison de la valeur de MIN ou de MAX et affectation de la valeur courante de MIN et MAX en fonction de cette valeur).

                C'est mieux comme ça professeur ? ;) J'espère que ma boulette ne m'enlèvera pas trop de points à mon TP ..

        • [^] # Re: Compléments

          Posté par  . Évalué à 2. Dernière modification le 22 octobre 2019 à 18:51.

          En fait il y a une petite coquille.

          Le code marche, mais n'est pas réellement parlant. Pour être plus clair il faudrait remplacer bash
          SUM=$((SUM/NB_LINE))

          par

          MOYENNE=$((SUM/NB_LINE))

          et utiliser la variable MOYENNE dans la suite du code.

    • [^] # Re: Compléments

      Posté par  . Évalué à 4.

      Désolé de ne pas avoir assez détaillé et de débuter en bash.

      Tu n’as pas à t’excuser de débuter. Par contre, il faut le dire. Ma réponse était un peu rude, mais personnellement, je ferai comme avec mes enfants je les amènerai à réfléchir et à trouver la réponse par eux même.

      Étape 1 : exposer correctement ton problème.

      • Qu’elles sont tes entrées ?
        • type de donnée ;
        • forme ;
      • Qu’elles sont tes sorties ?
        • type de données ;
        • forme ;
      • Qu’elle sont les transformations à apporter aux données d’entrées pour obtenir les sorties ?

      Étape 2 : essayer de faire un programme.

      Étape 3 : Présenter l’ensemble.

      Étape 4 : On t’aide à trouver une solution.

      Totof2000 a réussi à comprendre ton besoin, mais franchement pour moi, ce n’était pas clair.

      Pour ton max et min, tu peux à chaque ligne lue, vérifier si c’est le nouveau min ou max et mettre à jour le min et/ou le max.

Suivre le flux des commentaires

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