Forum Programmation.shell Variables

Posté par  .
Étiquettes : aucune
0
29
mai
2005
J aimerais dans un script pouvoir utiliser comme nom de variable le contenu d un variable tapée précédemment.
par exemple


read pomme #je tape 5
5=valeur #je mets une valeur dans la variable créé à partir de ce que j ai tapé


je ne sais pas comment faire, ni si c'est possible.
Sinon un solution serait d'exécuter un sous script tel que:


read plouf
echo $plouf=truc >tmp
sh tmp


mais je ne sais pas comment on fait marcher un sous-script

merci de votre aide.
  • # Hum

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

    En prenant ta 2ème hypothèse, j'ai griffoné ce bout de code.
    C'est pas optimisé, mais ca fait ce que tu veux :

    #!/bin/sh

    echo "Saisissez un nom de variable : "
    read variable

    fic=`mktemp`

    cat << FIN_FIC > $fic
    echo "Veuillez saisir la valeur pour la variable $variable : "
    read $variable
    echo "Désormais la variable $variable vaut \$$variable"
    FIN_FIC

    cat $fic
    chmod u+x $fic
    $fic
    rm -rf $fic





    Voilou, en esperant que ca t'aide
    • [^] # Re: Hum

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

      euh le cat $fic c'etait pour mon débugage perso, donc c'est à virer :)
  • # eval

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

    read plouf
    eval "$plouf=truc"
    
    Par contre fais gaffe si quelqu'un tape rm -rf /var; plop ca fera rm -rf /var;plop=/tmp donc met pas ce genre de trucs dans un script executé par sudo ou alors vérifie d'abord que ca a bien la forme d'une variable, genre :
    eval "${plouf//[^[:alnum:]_]/}=truc"
    • [^] # Re: eval

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

      c'est effectivement un peu plus élégant que ma réponse du dessus, et surtout plus simple :)
      • [^] # Re: eval

        Posté par  . Évalué à 1.

        merci beaucoup a vous tous pour cette célérité

        impressionnant
        :-)

Suivre le flux des commentaires

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