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 :

Test 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 éclairé
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Par défaut Test d'une variable
    Bonjour,

    un truc qui est en train de me rendre dingue. Voici un test que je veux faire
    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
    19
    20
    21
    22
    echo "#############################################################################"
    echo "#         Script global de chargement des cubes en DEVELOPPEMENT            #"
    echo "#         ======================================================            #"
    echo "#                                                                           #"
    echo "# Option 1  - Génération et mise à disposition des fichiers plats sans      #"
    echo "#             sans lancer la reconstructions des cubes                      #"
    echo "# Option 2  - Cycle complet : génération, tranfert et alim                  #"
    echo "#                                                                           #"
    echo "#############################################################################"
    echo "\n"
    echo "Quelle option, 1 ou 2 ? :"
    read RESP1
    if ( [[ -n $RESP1 || $RESP1 = "1" || $RESP1 = "2" ]] ); then
      option=OK
      echo "1er test option : >$option< pour le choix $RESP1"
    else
     echo "******************************************************"
      echo "*  !!!     Erreur dans le choix des options     !!!  *"
      echo "*  !!! Relancez le script et choisissez 1 ou 2  !!!  *"
      echo "******************************************************"
      echo "\n"
    fi
    en ligne 13 je vérifie que mon user a fait les bons choix. Pour une valeur nulle, non saisie, je file bien dans le "else". Mais que je tape 1, 2 ou 3, il file dans le "then" alors que seul 1 et 2 devraient y mener.

    Je ne comprends pas pourquoi d'autant que je n'ai pas de message d'erreur...

    Pouvez vous m'aider ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Si RESP1 vaut 3, alors -n $RESP1 est vrai.
    C'est tout à fait normal que tu "rentres dans le then".

    La ligne if [[ "${RESP1}" = [12] ]]; then est largement suffisante pour répondre à ton besoin.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Invité
    Invité(e)
    Par défaut
    En effet,

    man bash

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
           -n string
                  True if the length of string is non-zero
    Donc si tu introduis n'importe quelle chaine de caractère dont la longueur est supérieure à 0(1,5, aaaa, b, ...), tu rentreras dans le bloc then.

  4. #4
    Membre éclairé
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Par défaut
    Je ne veux rentrer dans le "then" que pour 1 ou 2. Tout autre saisie de valeur ou chaine vide aille dans le "else".

    Merci.

    Bon WE

  5. #5
    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 mederik Voir le message
    Je ne veux rentrer dans le "then" que pour 1 ou 2. Tout autre saisie de valeur ou chaine vide aille dans le "else".
    Bonjour

    Pas grave: ce n'est qu'un problème de pure logique!

    Actuellement, ton test dit de faire le "then" si la réponse est non vide ou bien égale à 1 ou bien égale à 2.
    Donc, pour toute réponse non vide, la condition est réalisée et tu passes dans le "then".

    Sauf raison valable, il est recommandé de mettre les variables entre guillemets.
    Outre la proposition de al1_24 que je plussoie, pour rester dans ton style, tu peux écrire (en supprimant les parenthèses inutiles et en ajoutant les guillemets (recommandés) (et les accolades (tant qu'on y est)))):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ "${RESP1}" = "1" || "${RESP1}" = "2" ]] ; then
    PS: ton script produira une erreur si l'utilisateur est en 'nounset' (s'il a tapé set -u avant de sourcer le script).
    Dans ce cas, il vaut mieux faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [[ -z "${RESP1-}" ]] ; then
        : # traitement réponse vide
    elif [[ "${RESP1}" = "1" || "${RESP1}" = "2" ]] ; then

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

Discussions similaires

  1. [Tableaux] Problème de test sur une variable
    Par Laurent64 dans le forum Langage
    Réponses: 7
    Dernier message: 20/05/2007, 14h04
  2. faire un test sur une variable
    Par donny dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2006, 15h55
  3. [langage] probleme sur test d'une variable
    Par Melvine dans le forum Langage
    Réponses: 11
    Dernier message: 25/10/2006, 19h31
  4. [Mail] Construire un test avec une variable
    Par jeromesco dans le forum Langage
    Réponses: 3
    Dernier message: 17/02/2006, 21h52
  5. [xsl] Test avec une variable ?
    Par maxonman dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 24/01/2006, 10h47

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