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 POSIX Discussion :

Problème avec les conditions if et/ou


Sujet :

Shell et commandes POSIX

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut Problème avec les conditions if et/ou
    Bonjour,

    J'ai un petit dans une partie de mon code avec les conditions et/ou.
    j'ai 3 variables avec des entiers: val1, val2 et val3
    En fonction des valeurs des 3 valeurs je dois définit les valeur de val4 et val5.

    Si (val1=1 ou 2 ou 3) ET (val2=0 OU 2) alors val4 prend 1 sinon 0
    Si val3 est différent de vide ET val2 est différent de 4 alors val5 prend 1 sinon 0.

    Voici ce que j'ai fait mais j'ai des erreurs.
    merci de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    if (([ $val1 -eq 1 ] || [ $val1 -eq 2 ] || [ $val1 -eq 3 ]) && ([ $val2 -eq 0 ] || [ $val2 -eq 2 ]))
    	then
    		val4=1
    	else
            	val4=0
    	fi
     
     
     
    if ([ !($val3 -eq NULL) ] && [ $val2 -eq 4 ]) 
    then
    	val5=1
    else
            val5=0
    fi

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 831
    Points
    30 831
    Par défaut
    NULL n'est pas reconnu comme étant une chaine vide, seulement comme la chaine 'NULL'.
    Pour tester si une chaine est vide ou non, on utilise respectivement -z et -nDans ton premier test, tu peux simplifier en utilisant la reconnaissance de format.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if [ "${val1}" = [123] ] && [ "${val2}" = [02] ]
    then
      val4=1
    else
      val4=0
    fi
    if [ -n "${val3}" ] && [ "${val2}" -ne 4 ]
    then
      val5=1
    else
      val5=0
    fi
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    merci pour cette contribution.

    Pour le 1er cas la condition sur val1 est 1 ou 2 ou 3 et non 123.

    Donc val4 prend la valeur 1 si [val1=1 ou si val1=2 ou si val1=3] ET si (val2=0 ou val2=2].


    Cdt

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 831
    Points
    30 831
    Par défaut
    As-tu testé la solution proposée ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Oui et j'ai toujours 0 dans les deux cas

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 831
    Points
    30 831
    Par défaut
    Quel shell utilises-tu ? Sur quel système ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    J'utilise du ksh sur du HP-UX

    Désolé je n'avais pas vu la réponse du 15h14. Je teste et je te dis.

    merci

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 831
    Points
    30 831
    Par défaut
    Tu as raison, j'ai fait une petite erreur.
    On peut d'ailleurs simplifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [[ "${val1}" == [123] ]] && [[ "${val2}" == [02] ]] && val4=1 || val4=0
    [ -n "${val3}" ] && [[ "${val2}" -ne 4 ]] && val5=1 || val5=0
    Testé avec bash et ksh sur AIX
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Il y a pas de if dans le code.

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 831
    Points
    30 831
    Par défaut
    et alors ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    J'ai fait un script simple pour tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/sh
     
     
    val1=1
    val2=0
    val3=4
     
     
    if [[ "${val1}" == [123] ]] && [[ "${val2}" == [02] ]] && val4=1 || val4=0
    if [ -n "${val3}" ] && [[ "${val2}" -ne 4 ]] && val5=1 || val5=0
     
    echo "$val5  $val4"
    Et j'ai ce message d'erreur
    ./test.sh[9]: Syntax error at line 9 : `==' is not expected.

  12. #12
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 831
    Points
    30 831
    Par défaut
    Je te laisse tester et comprendre ce que tu fais.

    N'oublie pas que sh n'est pas ksh.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    merci de votre aide!

    Je vais poursuivre mes recherches.

  14. #14
    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
    Citation Envoyé par al1_24 Voir le message
    Je te laisse tester et comprendre ce que tu fais.
    N'oublie pas que sh n'est pas ksh.
    T'es vache, là!!! (bien que tu aies tout à fait raison!!!)

    Citation Envoyé par moctarim Voir le message
    J'ai fait un script simple pour tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/sh
     
    val1=1
    val2=0
    val3=4
     
     
    if [[ "${val1}" == [123] ]] && [[ "${val2}" == [02] ]] && val4=1 || val4=0
    if [ -n "${val3}" ] && [[ "${val2}" -ne 4 ]] && val5=1 || val5=0
     
    echo "$val5  $val4"
    Et j'ai ce message d'erreur
    ./test.sh[9]: Syntax error at line 9 : `==' is not expected.
    La première ligne de ton script indique /bin/sh alors qu'il faut /bin/ksh

    Cela va sans dire... mais ça va mieux en le disant!

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Je reconnais que je suis encore un novice des différentes versions de shell et même de ce langage en général.

    J'avais bien remplace le sh par le ksh. Le problème se situait plutôt au niveau des == que j'ai remplacé par =

    Voici la version du script test corrigé et ca marche bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/ksh
    val1=1
    val2=0
    val3=''
     
     [[ "${val1}" = [123] ]] && [[ "${val2}" = [02] ]] && val4=1 || val4=0
    [ -n "${val3}" ] && [[ "${val2}" -ne 4 ]] && val5=1 || val5=0
    print $val4
    print $val5
    Encore merci beaucoup à vous deux.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut Problème de variables
    Bonjour, j'ai un autre problème toujours dans le même script

    j'ai recupéré mes 3 valeurs val1, val2 et val3 en faisant des awk sur une ligne de fichier et en spécifiant la zone.

    PAr contre lorsque je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [[ "${val1}" == [123] ]] && [[ "${val2}" == [02] ]] && val4=1 || val4=0
    [ -n "${val3}" ] && [[ "${val2}" -ne 4 ]] && val5=1 || val5=0
    les variables ne s'affiche pas.
    Lorsque je mets la valeur de val 1 s'affiche bien.

    PAr contre dans la ligne de condition elle ne s'affiche pas.
    Pour tester j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "[[ "${val1}" == [123] ]] && [[ "${val2}" == [02] ]] && val4=1 || val4=0
    et je ne vois plus les variables val1, val2 et val3 du coup les val4 et val5 sont toujours égal à 0.

    pourriez vous m'aider svp. Je bloque sur ce point depuis plusieurs heures voire jours.

    Mes meillerus voeux à tous.

  17. #17
    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
    Je n'arrive pas à comprendre ce que tu veux faire!?!?

    Au début, tu demandais à POSITIONNER val4 en fonction de val1 et val2, ainsi que val5 en fonction de val2 et val3, ce qui a été réalisé par les propositions fournies.

    Maintenant, que veux-tu d'autre?

    Voir les valeurs des variables val1 val2 val3?

    Voir les valeurs qui ont été affectées aux variables val4 et val5?

    Pourquoi la commande echo "${val1}" ne te convient-elle pas?

    Pourquoi veux-tu mélanger le test et l'affichage?

    Tester ou positionner, il faut savoir choisir (sauf dans un TAS (test and set)!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo "Avant: val1 = '${val1}'  val2 = '${val2}  val3 = '${val3}'"
     
    [[ "${val1}" == [123] ]] && [[ "${val2}" == [02] ]] && val4=1 || val4=0
    [ -n "${val3}" ] && [[ "${val2}" -ne 4 ]] && val5=1 || val5=0
     
    echo "Après: val4 = '${val4}'  val5 = '${val5}'"

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Bonjour jack-ft,

    Mon problème c'est que je ne retrouve pas les valeurs dans les conditions. J'ai l'impression que j'ai un souci pour recupérer les variables dans les lignes conditions alors qu'ils s'affichent bien avec echo.

    voici un code et le résultat de sortie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # test debut
     
    echo "Debut test"
     
    echo "$i"
     
    val1=$(echo "$i" | awk -F";" '{print $4}')
    val2=$(echo "$i" | awk -F";" '{print $6}')
    val3=$(echo "$i" | awk -F";" '{print $5}')
     
     
    echo "Avant: val1 = '${val1}'  val2 = '${val2}'  val3 = '${val3}'"
     
     [[ "${val1}" = [123] ]] && [[ "${val2}" = [02] ]] && val4=1 || val4=0
    [ -n "${val3}" ] && [[ "${val2}" -ne 4 ]] && val5=1 || val5=0
     
    echo "Apress: val4 = '${val4}'  val5 = '${val5}'"
    echo "Fin test"
    # test fin

    Resultat:

    Debut test
    0000008999152;386760087;28/11/2012;1;;1
    ' val3 = ''= '1' val2 = '1
    Apress: val4 = '0' val5 = '0'
    Fin test

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Et si je définis la variable directement dans le code
    i=0000008999152;386760087;28/11/2012;1;;1

    Ca marche bien et ca donne ca


    Debut test
    Avant: val1 = '1' val2 = '0' val3 = ''
    Apress: val4 = '1' val5 = '0'
    Fin test

    Par contre si je recupère la valeur dans un for
    Genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in $(cat fichier_intermediaire_filtre_sans_doublon.csv)
    do
    ...
    done
    ca ne marche pas.

  20. #20
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Euh... c'est censé faire quoi for i in $(cat fichier_intermediaire_filtre_sans_doublon.csv) ???
    Lire un fichier ligne par ligne ?
    $ man woman
    Il n'y a pas de page de manuel pour woman.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème avec les conditions
    Par vasilpapa dans le forum Haskell
    Réponses: 8
    Dernier message: 02/05/2014, 20h51
  2. Problème avec les conditions
    Par yoyo-tns dans le forum Shell et commandes POSIX
    Réponses: 4
    Dernier message: 27/11/2012, 09h45
  3. [PHP 5.3] Problème avec les conditions, lors de l'identification
    Par Devildz dans le forum Langage
    Réponses: 5
    Dernier message: 03/02/2012, 18h02
  4. Réponses: 9
    Dernier message: 29/03/2011, 20h45
  5. Problème avec les conditions ''sous-ensemble d'un tableau''
    Par djangossoul dans le forum LabVIEW
    Réponses: 2
    Dernier message: 07/06/2007, 12h23

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