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 :

if et opération artithmétique


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut if et opération artithmétique
    Bonsoir,

    J'aurais besoin de votre aide pour faire cet algo en bash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    si ($sleep / 60) + $hour <= "$1"
    alors echo "test"
    J'ai essayé ça, avec et sans parenthèse mais ça ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [ `expr $sleep / 60 + $hour` - ge "$1" ]
                    then echo "test"
    fi
    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    expr est une commande inutile dans les interpréteurs de commandes POSIX.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set 12 # pour définir $1
    sleep=1 hour=12
    if test $(( sleep/60 )) -ge $1 # des parenthèses doubles pour effectuer l'évaluation arithmétique.
    then
       echo "test"
    fi
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    Bonjour,

    J'ai essayé aussi avec $(( )) mais je n'ai pas réussi, dans ton code il manque le "+ $hour" dans test et ceci ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set 12 # pour définir $1
    sleep=1 hour=12
    if test $(( sleep/60 + $hour)) -ge $1 # des parenthèses doubles pour effectuer l'évaluation arithmétique.
    then
       echo "test"
    fi
    Y a t-il un moyen de faire ce test sans passer par une variable où je stockerai $sleep/60 ?

    Merci

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 362
    Par défaut
    Bonjour,
    Juste pour le fun (et un peu pour taquiner N_BaH ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ set 12
    $ sleep=1
    $ hour=12
    $ expr  $sleep / 60  + $hour \<= $1 >/dev/null && echo OK || echo KO
    OK
    $ set 11
    $ expr  $sleep / 60  + $hour \<= $1 >/dev/null && echo OK || echo KO
    KO

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    ceci ne marche pas
    est une variante du réputé «ça marche pô», comme n'étant pas descriptif
    • l'interpréteur (lequel?) affiche-t-il un message d'erreur ?
    • quel résultat est attendu ? quel est le résultat obtenu ?



    disedorgue :
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ set 12; sleep=1 hour=12
    $ (( sleep/60+hour <= $1 )) && echo OK || echo ko
    OK
    # ou alors
    $ let "sleep/60+hour <= $1" && echo ok || echo ko
    ok
    par contre, dash n'accepte pas la syntaxe (( )), et ne connaît pas let
    => emploi de if ...; then ...; fi,

    ou expr
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    Merci à vous de votre aide, finalement j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (( sleep/60+hour <= $1 ))
            then echo "OK"
    fi
    J'aurais quand même une question, que signifie "\<=" ? Pourquoi le "\" ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    pour éviter que le < soit interprété comme une redirection.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    D'accord, merci, je ne savais pas qu'il y avait besoin d'échapper les caractères avec expr.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    ce n'est pas expr qui interprète ce métacaractère, c'est l'interpréteur de commande, pour lequel il a une signification particulière (ici, une redirection).
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. [jsp]Date et opérations
    Par o151181 dans le forum Servlets/JSP
    Réponses: 17
    Dernier message: 09/04/2004, 16h41
  2. [Builder] Effectuer une opération quand une resource a changé
    Par Satch dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 08/04/2004, 13h22
  3. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  4. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45
  5. opération en XSL
    Par rastapopulos dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 12/03/2003, 22h39

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