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 :

Comparaison chaîne de caractère


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte Supervision
    Inscrit en
    Juillet 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte Supervision
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 84
    Par défaut Comparaison chaîne de caractère
    Bonjour,

    je rencontre un problème qui me chifonne un peu

    voila mon prog compare la date d'un fichier pour savoir si ce dernier date du même jour et du même mois que le système loçal

    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
    (ls -lt /var/opt/OV/Agent_Less/unix/logfile/hostname/*) > $tmpfile1
         #met le mois courant du fichier dans $tmpfile5
         cat $tmpfile1 | awk '{print $6}' > $tmpfile5
         #met le mois courant du systeme dans $tmpfile2
         date | awk '{print $2}' > $tmpfile2
    #     cat $tmpfile5 $tmpfile2
    #     oct
    #     oct
     
         if [ "$tmpfile5" != "$tmpfile2" ]
            then
                  echo "yes"
         else
                  echo "sucks"
         fi
         exit 0

    Mon problème se situe au niveau de la condition if, j'ai beau essayé plusieurs syntaxe la valeur de mes variables ne sont jamais remplacée, et le système me dit "/tmp/tmpfile5 != /tmp/tmpfile2" => VRAI
    Evidemment les noms des variables ne sont pas identiques donc la condition prend toujours le même chemin.

    J'ai testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if [ $tmpfile5 != $tmpfile2 ]
    if [ $tmpfile5 = $tmpfile2 ]
    La condition n'est jamais évaluée correctement, alors que si je fais un cat sur mes tmpfile ils sont tous les 2 remplis avec la valeur 'oct'


    Toute aide sera la bienvenue, je n'aime pas que la machine gagne...

    D'avance merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Tu devrais plutôt travailler avec des variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    tmp1=$(ls -l /var/opt/OV/Agent_Less/unix/logfile/hostname/* | awk '{print $6})
    tmp2=$(date +%b)
    if [ "$tmp1" = "$tmp2" ]
     then
       echo "correspond"
    else
       echo "ne correspond pas"
    fi
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Homme Profil pro
    Architecte Supervision
    Inscrit en
    Juillet 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte Supervision
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 84
    Par défaut
    Bonjour,

    mil merci a toi, cette syntaxe fonctionne parfaitement


  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte Supervision
    Inscrit en
    Juillet 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte Supervision
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 84
    Par défaut
    Heu juste une petite précision, je ne comprend pas bien pourquoi avec ma syntaxe les chaînes ne sont pas correctement évaluées.

    Quelle est la différence entre les 2 affectations?

  5. #5
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    pour info:

    http://www.linuxtopia.org/online_boo...rison-ops.html

    string comparison

    =
    is equal to
    if [ "$a" = "$b" ]
    ==
    is equal to
    if [ "$a" == "$b" ]
    This is a synonym for =.
    Note
    The == comparison operator behaves differently within a double-brackets test than within single brackets.
    [[ $a == z* ]]# True if $a starts with an "z" (pattern matching).
    [[ $a == "z*" ]] # True if $a is equal to z* (literal matching).
    [ $a == z* ] # File globbing and word splitting take place.
    [ "$a" == "z*" ] # True if $a is equal to z* (literal matching).
    !=
    is not equal to
    if [ "$a" != "$b" ]
    This operator uses pattern matching within a [[ ... ]] construct.
    <
    is less than, in ASCII alphabetical order
    if [[ "$a" < "$b" ]]
    if [ "$a" \< "$b" ]
    Note that the "<" needs to be escaped within a [ ] construct.
    >
    is greater than, in ASCII alphabetical order
    if [[ "$a" > "$b" ]]
    if [ "$a" \> "$b" ]
    Note that the ">" needs to be escaped within a [ ] construct.
    See Example 26-11 for an application of this comparison operator.
    -z
    string is "null", that is, has zero length
    -n
    string is not "null".

    Caution


    The -n test absolutely requires that the string be quoted within the test brackets. Using an unquoted string with ! -z, or even just the unquoted string alone within test brackets (see Example 7-6) normally works, however, this is an unsafe practice. Always quote a tested string. [1]

  6. #6
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Petit script rigolo permettant de voir comme ça marche

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #!/bin/bash 
     
    #créer un fichier temporaire zas
    touch azert_$$
     
    echo "Creation du fichier azert_$$"
    echo "Entrez une donnée"
    read var
     
    #deviens vrai si $var commence par azert
    echo -n "1:[[ $var == azert* ]]     :"
    [[ $var == azert* ]]     && echo "est vrai" ||  echo "est faux"
     
    # Vrai si $var est egal à azert*
    echo -n "2:[[ $var == \"azert*\" ]]   :"
    [[ $var == "azert*" ]]   && echo "est vrai" ||  echo "est faux"
     
    # si azert_$$ est passé en argument d'entrée alors deviens vrai
    # a condition de n'avoir qu'un seul fichier qui commence par azert_$$
    echo -n "3:[ $var == azert* ]       :"
    [ $var == azert* ]       && echo "est vrai" ||  echo "est faux"
     
    # Vrai si $var est egal à azert*
    echo -n "4:[ \"$var\" == \"azert*\" ]   :"
    [ "$var" == "azert*" ]   && echo "est vrai" ||  echo "est faux"
     
    #supprimer le fichier temporaire azert
    rm -i azert_*

Discussions similaires

  1. Comparaison chaîne de caractères
    Par sousou12 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 02/11/2012, 18h15
  2. bug comparaison chaînes de caractères
    Par vince29 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 11/06/2012, 11h35
  3. Réponses: 3
    Dernier message: 16/05/2007, 14h41
  4. [MySQL] Problème de comparaison de chaîne de caractères
    Par Laurent64 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/05/2007, 19h04
  5. [Excel-VBA] Pb de comparaison de chaîne de caractères
    Par tangjuncn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/02/2007, 12h50

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