Les Allergies
Alimentaires
Posez votre question Signaler

Tester l'égalité de deux chaines en bash [Résolu]

Arrakis - Dernière réponse le 31 janv. 2010 à 00:39
Bonjour,
Je me sens un peu bete de poster pour ca mais bon ca fait une heure que je suis dessus:
J'essaye juste de tester si une chaine vaut "total"... :s
J'ai essayé :
if $a == "total"
if "$a" == "total"
if [ $a == total ]
if $a = "total"
if [ $a = "total" ]
if [ "$a" == "total" ]
if [ "$a" = "total" ]
rien a faire, je n'arrive pas a trouver la bonne synthaxe, je vous met mon fichier entier au cas ou :
#!/bin/bash
while read line
do
a=`echo $line | awk -F" " '{print $2}'`
if "$a" == "total"; then
echo $line
fi
done < fichierLog
exit 0
Merci de votre aide
Lire la suite 

Tester l'égalité de deux chaines en bash »

11 réponses
Réponse
+3
moins plus
Salut,

Tout d'abord désolé pour ta syntaxe qui passe pas à cause de certaines fonctionnalités de mise en page du site et notamment l'emploi des doubles crochets qui renvoie un lien URL ;-((
Donc dans ce cas là, penser à ajouter un espace pour une meilleure mise en page...

La bonne syntaxe est : [ "$var" = "xxx" ]
[tmpfs]$ cat plop
1 totaux mauvais
2 total bon
3 totalité mauvais
4 totale mauvais
5 Total mauvais
6 toTal mauvais
7 total bon
8 tototal mauvais

[tmpfs]$ cat foo.sh
#!/bin/bash

while read line
do
a=$(echo $line | awk -F" " '{print $2}')
if [ "$a" = "total" ]; then
echo $line
fi
done < plop

exit 0
[tmpfs]$ ./foo.sh
2 total bon
7 total bon

[tmpfs]$
;-))
Ajouter un commentaire
Réponse
+1
moins plus
De rien ;-))
freakazoid - 31 janv. 2010 à 00:39
le truc d'est de mettre des espaces

ne pas ecrire

if [ "$a"="total" ]; then

mais plutot

if [ "$a" = "total" ] ; then

respecter un espace de part et d'autre du signe égal (=)
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

as-tu essayé?
if [ "$a" eq "total" ]
--
106485010510997108
Ajouter un commentaire
Réponse
+0
moins plus
Ah, petit problème d'affichage, lorsqu'il y a un lien c'est qu'il y a 2 crochets ouvrants et 2 fermants..
Arrakis - 20 mai 2008 à 11:34
Non, avec -eq il veut un entier :

integer expression expected
Ajouter un commentaire
Réponse
+0
moins plus
Merci de ta réponse,

Pour l'affichage, j'avais pourtant mis des espaces entre les doubles crochets et l'expression de test...

Pour ce qui est du code cela ne fonctionne pas chez moi !

voila un bout du fichier fichierLog:

72762560 ./nst-009
836997952 .
836997952 total

et mon script traitementSAN.sh :

#!/bin/bash

while read line
do
a=`echo $line | awk -F" " '{print $2}'`
if [ "$a" = "total" ]; then
echo $line
fi
done < fichierLog

exit 0

Ca ne me renvoie absolument rien !!!

Pourtant j'ai essayé avec ton exemple cela fonctionne...
peut-être est-ce " total" ou "total " et pas "total" dans mon fichier log...
Ajouter un commentaire
Réponse
+0
moins plus
Après vérification, ma taille de la chaine $a vaut 6 lorsque que $a vaut "total"... y'a un problème quelquepart, sauriez-vous comment matcher cette chaine avec une expression régulière?

merci !
jipicy- 20 mai 2008 à 12:26
[tmpfs]$ cat plop
72762560 ./nst-009
836997952 .
836997952 totale

[tmpfs]$ cat foo.sh
#!/bin/bash

while read line
do
a=$(echo $line | awk -F" " '{print $2}')
if [ "${a:0:5}" = "total" ]; then
echo $line
fi
done < plop

exit 0

[tmpfs]$ ./foo.sh
836997952 totale

[tmpfs]$
;-))
Ajouter un commentaire
Réponse
+0
moins plus
Ton soucis doit être ailleurs alors, parce que chez moi ça marche bien :
[tmpfs]$ cat plop
72762560 ./nst-009
836997952 .
836997952 total

[tmpfs]$ cat foo.sh
#!/bin/bash

while read line
do
a=$(echo $line | awk -F" " '{print $2}')
if [ "$a" = "total" ]; then
echo $line
fi
done < plop

exit 0

[tmpfs]$ ./foo.sh
836997952 total

[tmpfs]$
C'est un fichier Windows le ".log" ? Si oui alors peut être regarder du côté des fins di lignes différentes entre les 2 systèmes ;-(
Ajouter un commentaire
Réponse
+0
moins plus
Ca marche nickel en extrayant la sous-chaine :D

Le fichier log est un fichier Linux créé par une redirection (commande>fichierLog) ou la commande est l'execution d'un ssh distant + expect sur un serveur Linux aussi donc normalement pas de problème a ce niveau la

bizarre...

en tout cas ca marche comme ca, je vais m'en contenter :d

Merci beaucoup
Ajouter un commentaire
Ce document intitulé « Tester l'égalité de deux chaines en bash » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?