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 :

Faire une boucle avec des variables vides ?


Sujet :

Linux

  1. #1
    Membre actif
    Inscrit en
    Août 2005
    Messages
    697
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 697
    Points : 247
    Points
    247
    Par défaut Faire une boucle avec des variables vides ?
    [ksh]
    Bonjour,

    Je souhaite verifier l'absence de certains packages sur mon serveur.

    Ainsi les 2 variables ci-dessous sont vides (normal car j'ai supprimé les pkg):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AT=`dpkg -l | awk '{print $2}' | grep "^at$"`
    DOC=`dpkg -l | awk '{print $2}' | grep "^doc-debian$"`
    Je souhaite afficher un message à condition que ces deux packages soient absents:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for package in $AT $DOC 
    do
          if [[ -z $package ]]
           then
          echo "Tous les packages references dans ce script sont deja supprimes!"
          echo "Vou allez quitter ce script"
           fi
    done
    Je ne vois pas pourquoi cette boucle ne fonctionne pas.
    est-ce bien le meilleur moyen de verifier que plusieurs variable sont égales (nulles dans mon cas) ?

    Merci

    Laurent

  2. #2
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    logique $AT et $DOC sont évalués au niveau du for donc si $AT ou $DOC sont vides, ils n'existent pas dans la boucle

  3. #3
    Membre actif
    Inscrit en
    Août 2005
    Messages
    697
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 697
    Points : 247
    Points
    247
    Par défaut
    Donc du coup, pour vérifier que toutes mes variables sont égales (nulles dans mon cas) je suis obligé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if [[ -z $AT ]] && [[ -z $DOC ]] && [[ -z "les autres variables" ]]...
    then...
    Avec toutes les variables une par une ?

    Merci

    Laurent

  4. #4
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    bonjour,
    pourquoi ne pas faire simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    packages=${AT}${DOC}
    if [ -z "$package" ] ; then
        echo "tout a été supprimé !"
    fi
    Car je ne vois pas bien le pourquoi de faire une boucle dans ton sinon pour afficher les packages non-supprimés, ce que tu ne fais pas

  5. #5
    Membre actif
    Inscrit en
    Août 2005
    Messages
    697
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 697
    Points : 247
    Points
    247
    Par défaut
    Effectivement c'est beaucoup plus simple.

    C'est quoi l'opérateur implicite entre ${AT} et ${DOC} ?
    c'est à dire:
    si j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var=
    var2=test
    var3=test2
     
    RESULT=${var}${var2}${var3}
    Que vaut RESULT ? -> "testtest2" ?

    Merci

  6. #6
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    oui c'est axactement ça
    En fait ${toto} c'est exacttement la même chose que $toto. sauf qu'on utilise plus facliement la première forme pour des concaténation par exemple :

    narma@linimi:/tmp$ toto="tototototo"
    narma@linimi:/tmp$ echo "$totosuffixe"

    narma@linimi:/tmp$ echo "${toto}suffixe"
    tototototosuffixe

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

Discussions similaires

  1. [PHP 5.0] Faire une boucle pour des noms de variable
    Par lonyc dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2009, 18h19
  2. Réponses: 3
    Dernier message: 01/07/2009, 19h55
  3. [Tableaux] faire une page avec des catégorie
    Par kevinf dans le forum Langage
    Réponses: 20
    Dernier message: 29/09/2006, 06h58
  4. [PHP-JS] Comment créer une boucle avec des headers
    Par djinnwatcher dans le forum Langage
    Réponses: 10
    Dernier message: 17/07/2006, 16h48
  5. [SELECT] Faire un select avec des champs vides
    Par MinsK dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/08/2005, 01h05

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