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 :

opération arithmétique(soustraction) en shell


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut opération arithmétique(soustraction) en shell
    Bonjour

    J'arrive a récuperer dans 2 variables en fait des string qui correspondent a des dates converties en nombre ( mais je pense qu'elle doivent tj etre sous format string)
    Est ce qu'il est possible d'effectué une différence entre elle et ensuite de tester si la valeur est positive?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var=$TMP1 - $TMP2
    if ($var > 0) then 
    blabla
    fi
    Est ce fesble? merci

  2. #2
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    bien sur et heureusement

    il faut utiliser l'expansion arithmetique (cherche sur google tu trouvera plus d'explication dessus)
    Ensuite pour comparer ta valeur il faut utiliser test (dans ton shell tape : man test). attention la syntaxe est assez stricte, les espaces sont important.

    pour ton exemple il suffit de faire (il y a plusieurs manieres de l'ecrire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var=$(($TMP1 - $TMP2))
    if [ $var -gt 0 ]; then 
    echo "blabla"
    fi

    -gt signifie greater than
    Je ne suis plus sur pour le ; je te laisse verifier, je n'ai pas d'unix sous la main pour tester la (à ma grande tristesse je bosse sous windows lol)

    de plus le shell est un language de script non typé, donc que tes variables soit des string des nombres ou autres, il s'en fiche, pratique et parfois non

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par oniric Voir le message
    attention la syntaxe est assez stricte, les espaces sont important.
    C'est normal. Le shell est un langage interprété donc lent. Pour qu'il soit le moins lent possible il faut qu'il ait le moins de trucs à analyser dans les instructions donc des instructions le plus schématique possible. Et pour test, c'est
    test operandeUnaire valeur
    ou bien
    test valeur1 operandeBinaire valeur2
    Et pour que le shell comprenne rapidement où est la valeur et où est l'opérande ben faut mettre un séparateur => espace

    Citation Envoyé par oniric Voir le message
    Je ne suis plus sur pour le ; je te laisse verifier, je n'ai pas d'unix sous la main pour tester la (à ma grande tristesse je bosse sous windows lol)
    En fait, le point-virgule sert à séparer le mot clef then car la syntaxe de base c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if instruction
    then
        ...
    fi
    Si tu mets le then sur la même ligne, faut indiquer que ce n'est pas la même commande donc point-virgule

    Citation Envoyé par oniric Voir le message
    de plus le shell est un language de script non typé, donc que tes variables soit des string des nombres ou autres, il s'en fiche, pratique et parfois non
    C'est pour ça qu'on a besoin d'indiquer à la commande "test" l'opération qu'on veut faire (comparer des nombres ou des chaines) et que la seule manière de l'indiquer se fait avec l'opérande
    test a = b => comparaison de strings
    test a -eq b => comparaisons de nombres
    Et même si on a l'impression que c'est pareil ben ça ne l'est pas. Certes, écrire test 5 = 5 ou test 5 -eq 5 donne un résultat identique mais écrire
    test 00005 -eq 5
    et
    test 00005 = 5
    donnera "faux" à la 2° écriture alors que les valeurs sont numériquement égales...
    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]

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut
    Merci bien c'est résolu

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

Discussions similaires

  1. [Configuration] Opération arithmétique
    Par Fabouney dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 11/07/2007, 18h54
  2. Opération arithmétique dans un select
    Par Christophe Charron dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/03/2007, 11h19
  3. Réponses: 5
    Dernier message: 17/06/2006, 12h33
  4. Opération arithmétique de String à Float
    Par Shiryu57 dans le forum Langage
    Réponses: 4
    Dernier message: 13/03/2006, 10h22
  5. [VAL] Opérations arithmétiques
    Par WriteLN dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/05/2005, 09h59

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