Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/11/2008, à 13:07

AnsuzPeorth

[bash] Comparer 2 variables texte

Bjr,

L'eternel problème des espaces dans les variables...

Je vais essayer d'être clair !

ACCUEIL=`autoglade gui.glade`
rep=`echo "$ACCUEIL" | grep True | cut -d '=' -f1` #guillemets autour d'ACCUEIL pour garder les sauts de lignes.
corr=`cat code.txt | grep ^$n | cut -d "_" -f11`
if [ "$rep" != "$corr" ]; then
   echo "une faute"
fi

Si les variables 'rep' et 'corr' n'ont qu'un seul element ca fonctionne, si plusieurs,ca ne fonctionne pas.

echo $ACCUEIL
 reponse1='True' reponse2='True' reponse"='False'
echo $rep
 reponse1 reponse2
 echo $corr
 reponse1 reponse2

La sortie autoglade

reponse1='True'
reponse2='True'
reponse3='False'

Je pense donc que ca vient des sauts de lignes qui sont changer lorsqu'elles sont dans une variable.
J'ai bien essayé avec sed de remplacer le saut ou l'espace mais rien n'y fait... L'espace dans 'rep' n'est pas reconnu en tant que tel ! (j'ai essayé \n \t meme \r ....)
Par contre si je passe par un fichier temporaire (echo $rep > FichierTemp) ca fonctionne....

J'ai essayé tout ce que je savais (en tout cas ce que je me souvenais), et comme d'habitude, le réponse sera hyper simple et je passerai pour un ignare.... (pourtant je me suis déjà bien battu avec ces foutus variable sous bash !)

Merci d'avance

#2 Le 23/11/2008, à 13:15

draco31.fr

Re : [bash] Comparer 2 variables texte

Je pense que l'on va avoir du mal à t'aider ...

ACCUEIL=`autoglade gui.glade`
rep=`echo "$ACCUEIL" | grep True | cut -d '=' -f1` #guillemets autour d'ACCUEIL pour garder les sauts de lignes.
corr=`cat code.txt | grep ^$n | cut -d "_" -f11`
if [ "$rep" != "$corr" ]; then
   echo "une faute"
fi

On ne sait pas ce qu'il y a dans le fichier gui.glade, ni dans le fichier code.txt

EDIT : j'avais commencé à lire ce topic : http://forum.ubuntu-fr.org/viewtopic.ph … 2#p2229892 qui est en doublon, c'est meiux expliqué ici !

à priori tu veux comparer deux donnée, tu peux faire un :

diff <(echo $rep) <(echo $corr)

je pense que le code retour est 0 si aucune différence et 1 si il y en a.

PS : le contenu du fichier code.txt serait quand même un plus !!

Dernière modification par draco31.fr (Le 23/11/2008, à 13:21)

Hors ligne

#3 Le 23/11/2008, à 13:16

®om

Re : [bash] Comparer 2 variables texte

Je n'ai pas bien compris (je ne sais pas ce qu'est autoglade), mais :

a='x x x'
b='x x x'
[ "$a" = "$b" ] && echo égalité

Ça affiche bien "égalité"...

Hors ligne

#4 Le 23/11/2008, à 13:27

AnsuzPeorth

Re : [bash] Comparer 2 variables texte

Autoglade est l'équivalent de zenity (en beaucoup plus puissant)

Le fichier code.txt est plein de données d'où j'extrais ce qui m'interesse

Les retours des differents echo vous donne ce que contient les variables

En fin de compte, autoglade mets des sauts de ligne dans ses sorties, et lorsque ca passe par une variable, les sauts de ligne disparessent et sont remplacé par ???? (essayé avec sed de savoir ce que c'était)

En passant par un fichier temporaire ca fonctionne très bien !

ps:désolé pour le doublon, mais y'a eu un bug, involontaire !

#5 Le 23/11/2008, à 13:35

AnsuzPeorth

Re : [bash] Comparer 2 variables texte

re

Bon avec

diff <(echo $rep) <(echo $corr)

ca fonctionne bien !

Mais alors, pourquoi avec une comparaison 'if' ca ne le fait pas ?

si quelq'un à une réponse, que je me couche moins bête ce soir qu'hier soir !


En tout cas merci !

#6 Le 23/11/2008, à 13:48

AnsuzPeorth

Re : [bash] Comparer 2 variables texte

J'ajouterais meme qu'en utilisant 'diff' pour une comparaison, c'est beaucoup plus propre ! Je connaissais pas 'diff' comme ça !

Je l'utiliserais sans compter maintenant wink

#7 Le 23/11/2008, à 14:20

draco31.fr

Re : [bash] Comparer 2 variables texte

il y a deux chose en une dans mon exemple ...

diff fic1 fic2

te donne les différence entre fic1 et fic2

L'utilisation de <(ta_commande) permet de prendre le contenu de ta_commande en entrée du process.
C'est comme un tube en inversé.
Là où c'est intéressant, c'est quand un process (diff en l'occurence) prend plusieurs entrée.
Il n'est pas possible de rediriger deux tubes vers un même processus, mais la syntaxe <(ta_commande) le permet.

Pour le if, je ne sais pas quoi te dire, mais tu aurais aussi pu tester en passant par un tableau :

ACCUEIL=(`autoglade gui.glade`)
rep=(`echo "$ACCUEIL[@]" | grep True | cut -d '=' -f1`) #guillemets autour d'ACCUEIL pour garder les sauts de lignes.
corr=(`cat code.txt | grep ^$n | cut -d "_" -f11`)
if [ "$rep[@]" != "$corr[@]" ]; then
   echo "une faute"
fi

là tu devrais passer par des tableaux (array), et la comparaison de deux tableaux pourrait marcher ... mais pas sur.

Par ailleurs, il y a peut-être une différence entre les "espaces" dans le contenu de $rep et ceux dans le contenu de $corr : une modification de l'IFS pourrait changer le compartement du if... donc attention.

PS : pense à passer le topic en [RESOLU] si c'est OK pour toi.

Dernière modification par draco31.fr (Le 23/11/2008, à 14:24)

Hors ligne

#8 Le 23/11/2008, à 16:07

AnsuzPeorth

Re : [bash] Comparer 2 variables texte

draco31.fr a écrit :

Par ailleurs, il y a peut-être une différence entre les "espaces" dans le contenu de $rep et ceux dans le contenu de $corr : une modification de l'IFS pourrait changer le compartement du if... donc attention.

PS : pense à passer le topic en [RESOLU] si c'est OK pour toi.

Le problème vient bien des espaces, mais comment resoudre cela ???

J'ai déjà essayé en modifiant l'IFS mais ca n'avait pas l'effet voulu...

Par contre, je ne peux pas passer le sujet en résolu car je ne suis pas connecté sous mon pseudo (je ne suis pas chez moi).

Merci pour le complement d'information !

(comment vous faites pour connaitre tout ça ??? j'ai parcouru toutes les docs online sans réponse. Je connais presque par coeur les pages d'ABStraduc, mais ces suptilitées du bash, où les trouver ?Y'a des putins de tronche sur ce forum.....)