IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Changer la valeur d'une variable


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut Changer la valeur d'une variable
    Bonjour, je suis novice ( ultra ) en la matière et j'ai un problème …. hum bête ... que je ne sais pas résoudre pourriez vous m'aider ?

    J'ai une variable que je souhaite modifier en fonction d'une condition mais je ne vois pas comment faire, avec le code et le résultat ca ira probablement plus vite :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    EXIST=false
     
    if [ $EXIST ]; then
    	echo "existe pas"
    	EXIST=true
    	echo "---" $EXIST
    else 
    	echo "existe"
    fi
     
    echo "-----------"
     
    if [ $EXIST ]; then
    	echo "existe pas"
    else 
    	echo "existe"
    fi
    Ce qui me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    existe pas
    --- true
    -----------
    existe pas
    Comme vous le voyez dans le premier if je cherche à changer la valeur de EXIST mais il ne le prend pas en compte

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 657
    Par défaut

    puisque Exist=false, alors $Exist n'est pas vide (il cointient littéralement «false»), et donc existe !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    unset Exist #éviter les variables tout en majuscules (c'est réservé aux variables d'environnement)
    echo "premier test :"
    if test -n "$Exist"
    then
       echo "\$Exist = $Exist"
    else
       Exist="quelque chose"
    fi
    echo "deuxième test :"
    if test -n "$Exist"
    then
       echo "\$Exist = $Exist"
    else
       Exist="quelque chose"
    fi
    cf. help test
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par CaRadek Voir le message
    Comme vous le voyez dans le premier if je cherche à changer la valeur de EXIST mais il ne le prend pas en compte
    En fait, il le prend bien en compte, mais c'est ton test qui ne va pas...

    Comme dirait l'autre: "mon ordinateur ne fait jamais ce que je veux; il s'obstine à ne faire que ce que je lui demande"...

    Pour tester la valeur de EXIST, je te propose de changer les tests:
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ "${EXIST}" = "true" ]; then
    Cela devrait améliorer les choses!

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CaRadek Voir le message
    Bonjour, je suis novice ( ultra ) en la matière et j'ai un problème …. hum bête ... que je ne sais pas résoudre pourriez vous m'aider ?

    J'ai une variable que je souhaite modifier en fonction d'une condition mais je ne vois pas comment faire, avec le code et le résultat ca ira probablement plus vite :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    EXIST=false
     
    if [ $EXIST ]; then
    	echo "existe pas"
    	EXIST=true
    	echo "---" $EXIST
    else 
    	echo "existe"
    fi
     
    echo "-----------"
     
    if [ $EXIST ]; then
    	echo "existe pas"
    else 
    	echo "existe"
    fi
    Ce qui me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    existe pas
    --- true
    -----------
    existe pas
    Comme vous le voyez dans le premier if je cherche à changer la valeur de EXIST mais il ne le prend pas en compte
    Salut

    Ce qu'il faut bien comprendre, c'est que "true" et "false" tels que tu les emploies, ne sont que du texte (d'ailleurs en Bourne Shell, les variables ne contiennent que du texte) et donc quand tu écris [ $EXIST ] tu ne fais que demander si la variable contient quelque chose.
    Donc tu peux tout à fait résoudre ton problème; mais à condition de bien l'expliciter.

    Donc tu as maintenant plusieurs solutions
    1) tu décides que le choix se fera sur les chaines "true" et "false". Ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    EXIST="false"
     
    if [ "$EXIST" = "false" ]; then
    	echo "existe pas"
    	EXIST="true"
    	echo "---" $EXIST
    else 
    	echo "existe"
    fi
     
    echo "-----------"
     
    if [ "$EXIST" = "false" ]; then
    	echo "existe pas"
    else 
    	echo "existe"
    fi

    2) Tu décides que le choix se fera sur le fait que la variable existe (et est non vide) ou n'existe pas (ou est vide). Ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # Donc là tu ne mets plus rien puisqu'il ne faut pas créer la variable
    if [ -z "$EXIST" ]; then     # -z renvoie vrai si la chaine est vide (ou, à fortiori, n'existe pas)
    	echo "existe pas"
    	EXIST="true"     # Ou ce que tu veux => EXIST="trugudlu" si tu en as envie...
    	echo "---" $EXIST
    else 
    	echo "existe"
    fi
     
    echo "-----------"
     
    if [ -z "$EXIST" ]; then
    	echo "existe pas"
    else 
    	echo "existe"
    fi
     
    # Eventuellement unset EXIST si tu veux supprimer la variable (et donc la remettre à "faux" selon ta convention)

    3) Tu décides que le choix se fera à partir des programmes true et false natifs d'Unix. Donc là c'est un poil plus compliqué car il te faut maintenant passer par la variable $? contenant l'état du dernier programme lancé ; et savoir que true renvoie un état à 0 et false renvoie un état à autre chose que 0.

    Ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    false; EXIST=$?          # Tu récupères dans EXIST le statut de la dernière commande exécutée (ici "false")
    if [ $EXIST -ne 0 ]; then
    	echo "existe pas"
    	true; EXIST=$?
    	echo "---" $EXIST
    else 
    	echo "existe"
    fi
     
    echo "-----------"
     
    if [ $EXIST -ne 0 ]; then
    	echo "existe pas"
    else 
    	echo "existe"
    fi
    Donc comme tu le vois, il te faut juste établir les conventions et ensuite les utiliser.

    PS: tu remarqueras que chaque fois que je veux évaluer le texte de ma variable, je la mets entre guillemets. Et quand j'évalue sa valeur numérique (-ne), je ne mets pas de guillemets. C'est pour que le shell ne soit pas perdu en voyant [ -z ] si jamais la variable n'existe pas. Avec des guillemets, il verra [ -z "" ] et saura qu'il lui faut évaluer une chaine vide (ce qu'il sait parfaitement faire).

    PS2: il est d'usage de mettre les variables en minuscules pour ne pas écraser les variables officielles de ton environnement (HOME, PATH, PS1, PS2, ...). Parce que si tu décides par inadvertance d'utiliser une variable que tu appelles "IFS" et que tu écris par exemple IFS="true" tu auras un sacré souci (le shell utilise cette variable comme séparateur de mots...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [WB14] Changer la valeur d'une variable globale
    Par peepo dans le forum WebDev
    Réponses: 4
    Dernier message: 28/07/2010, 05h02
  2. Réponses: 1
    Dernier message: 11/12/2007, 01h24
  3. changer la valeur d'une variable en cliquant sur un lien
    Par nintendoplayer dans le forum Langage
    Réponses: 2
    Dernier message: 05/08/2007, 19h09
  4. changer la valeur d'une variable avec 2 bouton
    Par toutounesan_bg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 03/08/2007, 10h51
  5. [Système] Changer la valeur d'une variable GET
    Par toddy_101 dans le forum Langage
    Réponses: 13
    Dernier message: 31/01/2007, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo