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 :

[KSH] Comparaison avec '('


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Par défaut [KSH] Comparaison avec '('
    Bonjour,

    Je rencontre actuellement un petit problème.

    Je dois analyser une chaine SQL qui contient le caractère '('.

    Seulement, lorsque dans ma boucle for, j'arrive au caractère '(', il me faut une erreur type "GestionFillFac[16]: fillfactor: unknown test operator"

    Mon code KSH est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    DESCRIPTION="create index testID on DS_PENDING_JOB ( BATCH_ID ASC)    with reservepagegap= 0"
     
    # Le decoupage de la description est mis dans un tableau
    `set -A DECOUPAGEDESC ${DESCRIPTION[*]}`
     
    # Pour chaque bloc de la description on effectue un traitement
    for DESC in ${DECOUPAGEDESC[@]}
    do
    if [ "${DESC}" = 'fillfactor' -o "${DESC}" = '=' -o "${DESC}" = 'with' ]
    DESC=''
    fi
    done
    Le résultat "DESCRIPTION" en entré, ne peut être modifié, donc, je ne peux pas intervenir sur le problème de formatage du (.

    Merci d'avance pour vos réponses.

    Cordialement,

    Mickaël.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Gamez29 Voir le message
    Bonjour,

    Je rencontre actuellement un petit problème.

    Je dois analyser une chaine SQL qui contient le caractère '('.

    Seulement, lorsque dans ma boucle for, j'arrive au caractère '(', il me faut une erreur type "GestionFillFac[16]: fillfactor: unknown test operator"

    Mon code KSH est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    DESCRIPTION="create index testID on DS_PENDING_JOB ( BATCH_ID ASC)    with reservepagegap= 0"
     
    # Le decoupage de la description est mis dans un tableau
    `set -A DECOUPAGEDESC ${DESCRIPTION[*]}`
     
    # Pour chaque bloc de la description on effectue un traitement
    for DESC in ${DECOUPAGEDESC[@]}
    do
    if [ "${DESC}" = 'fillfactor' -o "${DESC}" = '=' -o "${DESC}" = 'with' ]
    DESC=''
    fi
    done
    Le résultat "DESCRIPTION" en entré, ne peut être modifié, donc, je ne peux pas intervenir sur le problème de formatage du (.

    Merci d'avance pour vos réponses.

    Cordialement,

    Mickaël.
    Pourquoi mets-tu ton "set -A ..." entre quote inversées ??? Sais-tu quelle est l'utilité et le but de la syntaxe `commande` ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DESCRIPTION="create index testID on DS_PENDING_JOB ( BATCH_ID ASC)    with reservepagegap= 0"
     
    for DESC in $DESCRIPTION
    do
        [ "${DESC}" = 'fillfactor' -o "${DESC}" = '=' -o "${DESC}" = 'with' ] && DESC=''
    done
    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]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Pourquoi mets-tu ton "set -A ..." entre quote inversées ??? Sais-tu quelle est l'utilité et le but de la syntaxe `commande` ???
    Oui, je le sais, mauvais copier/coller d'un autre script.

    Concernant mon cas, dans la boucle même en prenant directement la variable DESCRIPTION, le problème reste le même.

    Quand il passe au niveau de "DS_PENDING_JOB" pas de problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    + [ DS_PENDING_JOB = fillfactor -o DS_PENDING_JOB = = -o DS_PENDING_JOB = with ]
    Mais quand, on arrive au caractère '(' il l'interprete et dit qu'il y a une erreur de syntaxe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    + [ ( = fillfactor -o ( = = -o ( = with ]
    GestionFillFac[16]: fillfactor: unknown test operator

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Gamez29 Voir le message
    Oui, je le sais, mauvais copier/coller d'un autre script.

    Concernant mon cas, dans la boucle même en prenant directement la variable DESCRIPTION, le problème reste le même.

    Quand il passe au niveau de "DS_PENDING_JOB" pas de problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    + [ DS_PENDING_JOB = fillfactor -o DS_PENDING_JOB = = -o DS_PENDING_JOB = with ]
    Mais quand, on arrive au caractère '(' il l'interprete et dit qu'il y a une erreur de syntaxe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    + [ ( = fillfactor -o ( = = -o ( = with ]
    GestionFillFac[16]: fillfactor: unknown test operator
    Etonnant problème. J'ai dû booter mon PC sur ma partition Linux car ça m'intéressait trop pour attendre jusqu'à demain et je pense avoir trouvé la raison et donc un moyen de contourner.

    Au début, je pensais que c'était une question de guillemet et aussi de crochet (incompatibilité entre ")" et "]" ?). Mais en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test "${DESC}" = "fillfactor" -o "${DESC}" = "=" -o "${DESC}" = "with" && ...
    Ca n'a pas fait mieux.

    Ensuite, je me suis demandé sur quel mot il bloquait. J'ai donc tenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test "${DESC}" = "fillfactor" && ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test "${DESC}" = "=" && ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test "${DESC}" = "with" && ...
    Et là, chacun des 3 essais a parfaitement fonctionné.

    J'en suis venu à la conclusion que c'était l'association de la parenthèse dans la variable et le connecteur "-o" qui chiait au niveau du shell (mais je ne peux pas expliquer pourquoi). J'ai aussi tenté "-a" juste pour voir => idem.

    Donc j'ai remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( test  "${DESC}" = "fillfactor" || test "${DESC}" = "=" || test "${DESC}" = "with" ) && ...
    Et là, plus de pb.

    [EDIT]
    Je reviens sur ce post pour rajouter qu'aujourd'hui j'ai fait quelques essais sur cette instruction.
    Quand je tape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test "$var" = "(" -o "$var" = "("
    Ca chie totalement, que var contienne ")" ou "(". Il se mélange dans les parenthèses.

    En revanche, si je tape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test "$var" = ")" -o "$var" = ")"
    Là, si "$var" contient "(" plus de problème. Le shell voit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test "(" = ")" -o "(" = ")"
    Et question parenthèses il n'est pas géné mais bizarrement, le test est toujours vrai. Et j'en suis arrivé à taper
    Et là encore le test est encore vrai. Et là je reste sec...
    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]

Discussions similaires

  1. Comparaison avec BSTR
    Par Sarkou dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 17/11/2006, 15h38
  2. [Oracle] type date: comparaison avec l'année en cours
    Par zchallal dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/06/2006, 07h39
  3. comparaison avec strcmp
    Par je®ome dans le forum C
    Réponses: 9
    Dernier message: 23/05/2006, 18h09
  4. Ksh, problème avec une simple boucle for
    Par herzleid dans le forum Linux
    Réponses: 4
    Dernier message: 22/03/2006, 14h45
  5. comparaison avec substring
    Par tidan dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/01/2005, 17h13

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