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

Linux Discussion :

[Shell] Tester si une variable existe ou est vide


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 50
    Points : 39
    Points
    39
    Par défaut [Shell] Tester si une variable existe ou est vide
    Bonjour, ma question est dans le titre, je voudrais savoir comment faire en shell script pour tester mes parametes. Comment faire la difference entre :

    et

    dans le premier cas je devrais avoir $1 innexistant, dans le deuxieme $1 existant mais vide.

    me donne vrai pour les deux cas

    Merci d'avance !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Points : 95
    Points
    95
    Par défaut
    Bonjour,

    dans les 2 cas la longueur de la chaîne testée est zéro, c'est donc normal que le test -z soit vrai à chaque fois non? A moins que quelque-chose m'échappe....

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 50
    Points : 39
    Points
    39
    Par défaut
    oui, donc comment savoir si un parametre a ete passe vide ou pas passe ? Je veux dire, si il y a un autre moyen que de tester le nombre de parametres...

    un truc similaire a isset() en php ou if (var) en C

  4. #4
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    Citation Envoyé par Toutankharton Voir le message
    oui, donc comment savoir si un parametre a ete passe vide ou pas passe ? Je veux dire, si il y a un autre moyen que de tester le nombre de parametres...

    un truc similaire a isset() en php ou if (var) en C
    Normalement dans le script shell, il faut verifier la validité des argument avant de passer à l'execution du script.

    alors il faut avoir un test sur le nombre des args ( $# )
    "La créativité est faites d'attention et de respect pour les petits faits de la vie."

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par Toutankharton Voir le message
    oui, donc comment savoir si un parametre a ete passe vide ou pas passe ? Je veux dire, si il y a un autre moyen que de tester le nombre de parametres...

    un truc similaire a isset() en php ou if (var) en C

    Ok, je me disais aussi

    Avec des guillemets ça fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if test -z "$1"
        then echo "pas de parametre: \"${1}\" "
        else echo "le paramètre entré est \"${1}\" "  
    fi
    idem pour les if. Mais je n'ai pas trouvé la raison...

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par To-Ma Voir le message
    idem pour les if. Mais je n'ai pas trouvé la raison...
    Parce que, quand tu fais
    et que $1 est vide, le shell évalue
    Et là, il lui manque un élément pour bien évaluer la chose. Bon tu dis qu'il te renvoie "vrai" ce qui m'étonne un peu mais en tout cas l'expression est bancale et on ne peut pas présumer du résultat logique de l'expression.

    Quand tu fais
    et que $1 est vide, le shell voit quand même une expression correcte à savoir
    Là c'est un vrai test avec l'option -z associée à un élément à tester qui est "". Aucun problème de syntaxe.

    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a=oui
    test $a = oui && echo gagné
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unset a
    test $a = oui && echo gagné  => test := unary operator expected => il lui manque un truc à comparer avec "oui"
    Ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a=oui
    test "$a" = "oui" && echo gagné
    unset a
    test "$a" = "oui" && echo gagné   => pas d'erreur de syntaxe
    Bon sinon je ne vois pas trop pourquoi tu ne veux pas tester "$# -ne 0" mais c'est toi qui voit. Tu peux aussi te pencher sur ${var:-string par défaut} qui te renvoie "string par défaut" si "var" est vide ou inexistante
    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]

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Points : 95
    Points
    95
    Par défaut
    OK pour test, merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment tester si une variable existe ?
    Par [ZiP] dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/08/2012, 18h53
  2. [PHP 5.1] tester qu'une variable existe même si elle vaut null
    Par hadesjack dans le forum Langage
    Réponses: 5
    Dernier message: 15/02/2012, 15h23
  3. Tester si une variable existe
    Par Misspatate dans le forum SAS Base
    Réponses: 7
    Dernier message: 26/07/2011, 10h12
  4. Tester si une variable passé en url existe
    Par ran_hery dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 02/08/2005, 14h06
  5. Tester qu'une variable varchar est un nombre
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/06/2005, 13h29

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