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 :

Explication de la condition : if [ $? -ne 0 ]; then


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    test
    Inscrit en
    Mai 2016
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : test
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mai 2016
    Messages : 343
    Points : 121
    Points
    121
    Par défaut Explication de la condition : if [ $? -ne 0 ]; then
    bonjour a tous

    j'avais commencé a étudié la programmation shell pour des besoin spécifiques pour moi c'est du chinois

    j'ai un script mis en shell qui s’occupe de faire le sauvegarde des base postgres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pg_dump -p 5432 -U postgres -F c -b -v -i -f "$dir/${dbase}.dump" $dbase
    if [ $? -ne 0 ]; then
            echo "ERROR: pg_dump failure ($?), aborting script."
            exit 1
    fi
    ce que j’arrive pas a le comprendre c'est le test IF Qui a une idée il sert a quoi cette condition ?

    merci pour vos explications

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 443
    Points : 43 088
    Points
    43 088
    Par défaut
    la boucle if..then va exécuter du code sous condition, la condition qui est entre crochet.

    $? correspond au code retour de la dernière commande exécutée.
    -ne n'est pas dur à comprendre : not equal

    Donc si le retour de ta commande pg_dump a retourné une erreur, le script est interrompu avec un message d'erreur.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    En plus de l'excellente explication de chrtophe, il est plus simple et àmha plus clair et plus sûr de tester directement le résultat de la commande.
    Je réécrirais ton script ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ! pg_dump -p 5432 -U postgres -F c -b -v -i -f "$dir/${dbase}.dump" $dbase
    then
            echo "ERROR: pg_dump failure ($?), aborting script."
            exit 1
    fi
    Le "!" veut dire "not" (sous réserve qu'il soit défini, ce qui est le cas le plus général).

    Le code peut donc se lire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Si le pg_dump échoue
    alors afficher une erreur et quitter le script
    Rq: j'ai déjà vu des débutants (probablement moi compris) tomber dans le panneau suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pg_dump -p 5432 -U postgres -F c -b -v -i -f "$dir/${dbase}.dump" $dbase
    echo "pg_dump a retourné $?"
    if [ $? -ne 0 ]; then
            echo "ERROR: pg_dump failure ($?), aborting script."
            exit 1
    fi
    Je suis prêt à parier que ce script n'affichera jamais de message d'erreur...

Discussions similaires

  1. [XL-2013] Condition dans un IF THEN qui ne réagit pas comme d'habitude.
    Par jbellavance dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/03/2015, 23h43
  2. Condition if then dans une requête Access
    Par fanie dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 28/10/2014, 10h15
  3. Réponses: 5
    Dernier message: 31/07/2008, 20h09
  4. [Requête] Explication sur une condition dans une Requête
    Par jimmymatrix dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/05/2007, 14h34
  5. [Demande explication] COndition requete
    Par GarsDuCalvados dans le forum Requêtes et SQL.
    Réponses: 25
    Dernier message: 19/03/2007, 20h59

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