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érateur arithmétique


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 162
    Points : 60
    Points
    60
    Par défaut Opérateur arithmétique
    Bonjour,

    Je souhaite effectuer un traitement seulement si une variable n'est pas égal à une chaine. Voici ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( $0 != "maChaine" )
    Mais j'obtiens une erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    awk: syntax error near line 27
    awk: illegal statement near line 27
    J'ai essayé de remplacer ! par ~ mais c'est pareil.
    Sais-tu quel est l'opérateur pour la négation ?

    Merci.

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    J'ai toujours fait mes if avec des crochets plutôt que des parenthèses.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    man bash ou voire signature .

    pour un test de chaine :
    [[ $var != "chaine ]]
    pour un test numerique
    (( $var != 45 ))

    ...

  4. #4
    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
    En bash, on teste l'égalité numérique avec -eq et pas = ni ==

    if [ $var -eq 0 ] then ...

    Attention $0 en bash désigne le nom du script en cours.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    en neolitique ausi .......... le bash EST posix donc la syntaxe que je donne fonctionne

  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 : 44
    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
    j'ai l'impression que ce n'est pas du bash qu'il veut faire mais du awk (cf l'erreur donnée)
    Donne nous un peu plus de ligne de ton script, car jene pense pas que l'erreur vienne de ta condition.
    Exemple detest en awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{if( $0 != "test" ){print "différent..."}else{print "identique"}}'

  7. #7
    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
    Citation Envoyé par MarcG
    en neolitique ausi .......... le bash EST posix donc la syntaxe que je donne fonctionne
    Tu ne compares pas la meme chose, ton = compare deux chaines de caractères.

    00 = 0 retournerai faux alors que c'est bien une égalité
    00 -eq 0 te retournerai vrai ( et c'est bien ce qu'on demande )

  8. #8
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    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
    Citation Envoyé par becket
    Citation Envoyé par MarcG
    en neolitique ausi .......... le bash EST posix donc la syntaxe que je donne fonctionne
    Tu ne compares pas la meme chose, ton = compare deux chaines de caractères.

    00 = 0 retournerai faux alors que c'est bien une égalité
    00 -eq 0 te retournerai vrai ( et c'est bien ce qu'on demande )
    ha non ce n'est pas ce qui est demandé
    -eq vérifie l'égalité entre 2 entiers
    = vérifie l'égalité entre 2 chaines
    if ( $0 != "maChaine" )
    et là il veut tester 2 chaines

    mais pour moi il ne s'agit toujours pas de bash mais de awk.....
    Citation Envoyé par erreur du script
    awk: syntax error near line 27
    awk: illegal statement near line 27

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    Citation Envoyé par becket
    Citation Envoyé par MarcG
    en neolitique ausi .......... le bash EST posix donc la syntaxe que je donne fonctionne
    Tu ne compares pas la meme chose, ton = compare deux chaines de caractères.

    00 = 0 retournerai faux alors que c'est bien une égalité
    00 -eq 0 te retournerai vrai ( et c'est bien ce qu'on demande )
    heuuu ATTENTION
    00 = 0 ne veut rien dire en shell
    la "commande" shell sont :
    [[ ]] et/ou (( ))
    [[ "00" == "0" ]] est faux (ne pas oublier les "") alors que ([[ ""00" = "O" ]] fonctionne aussi mais ne facilite pas la lecture avec une syntaxe du genre [[ (a="val") = "00" ]] )
    (( 00 == 0 )) est vrai .. ( pas de "" car numerique !)

  10. #10
    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
    Citation Envoyé par narmataru
    ha non ce n'est pas ce qui est demandé
    Si,Si ...

    C'est un réponse à Marcg sur

    (( $var != 45 ))


    Je parlais bien d'un test sur une égalité numérique .

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

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 18h40
  2. Erreur 233 sous sql server
    Par brajae85 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/05/2009, 17h12
  3. Réponses: 2
    Dernier message: 05/10/2004, 23h43

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