Forum Programmation.shell [Résolu] Charger plusieurs valeurs depuis un fichier

Posté par . Licence CC by-sa
2
22
juin
2017

Salut les gens,

Dans le cadre d'un petit script bash qui me sert à faire du timelapse sur un RPi, j'aurais besoin de charger plusieurs valeurs dans plusieurs variables depuis un fichier.

J'explique…

Pour charger une valeur dans une variable, je fais par exemple

Frequency="$(</home/pi/timelapse/frequency)"

ou bien

Frequency=( `cat "/home/pi/timelapse/frequency" `)

(mais c'est un UUOC il paraît ;-), donc j'évite!)

Sauf que j'aurais besoin de faire ça avec 2 variables différentes depuis un seul fichier

C'est possible ?

  • # Cherchez plus

    Posté par . Évalué à 3.

    J'ai continué de creuser et j'ai trouvé une solution qui devrait faire mon affaire: créer un tableau.

    Si je pose que le contenu de mon fichier 'frequency' est par exemple

    Valeur1 Valeur2

    alors je peux faire

    Frequency=($(</home/pi/timelapse/frequency))

    puis, pour récupérer les valeurs je fais

    echo ${Frequency[0]}
    echo ${Frequency[1]}

    et ainsi de suite si j'ai plus que 2 valeurs.

    Merci à vous et probablement à bientôt pour une autre question de débutant ;-)
    (mais la prochaine fois je tournerai mon clavier 7 fois dans ma bouche avant de poster …)

    • [^] # Re: Cherchez plus

      Posté par (page perso) . Évalué à 4.

      Tu n'avais pas précisé la structure de ton fichier. Apparemment tu as trouvé une solution.
      Je t'en propose une autre (à tester quand même) à adapter :
      Le fichier frequency :

      valeur1
      valeur2
      …
      

      Le script :

      count=0
      while read Ligne; do
          Frequency[$count]="$Ligne"
          ((count++))
      done < frequency

      « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

      • [^] # Re: Cherchez plus

        Posté par . Évalué à 1.

        Bah voilà, maintenant j'ai plus de solutions que de problèmes :-D
        Merci à tous.

  • # read builtin + corrections ;-))

    Posté par (page perso) . Évalué à 2.

    Alors, concernant ça:

    Frequency=( cat "/home/pi/timelapse/frequency")

    L'emploi de parenthèse ET de backquote est inutile (deux sous-shell spawnés pour rien).
    Utilise soit

    Frequency=$(cat ton_fichier)

    ou

    Frequency=cat ton_fichier

    Ensuite, pour ta problématique, tu as plusieurs solutions:

    1. En utilisant le builtin "read", ça fait relativement facilement.

      cat "ton_fic" |while read var1 var2 ; do
      echo "v1=$var1 v2=$var2"
      done

    2. En évitant d'utiliser inutilement cat:

      $ while read var1 var2 ; do echo "v1=$var1 v2=$var2" ; done < test1
      v1=aaa v2=bbb
      v1=ccc v2=ddd
      v1=eee v2=fff
      v1=ggg v2=hhh
      v1= v2=

      Note: le code block est qd même bien foireux … :(

Suivre le flux des commentaires

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