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

Signaler
-
 freakazoid -
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

8 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 803
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]$
;-))
16
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 803
De rien ;-))
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 (=)
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 499
Salut,

as-tu essayé?
if [ "$a" eq "total" ]
--
106485010510997108
Ah, petit problème d'affichage, lorsqu'il y a un lien c'est qu'il y a 2 crochets ouvrants et 2 fermants..
Non, avec -eq il veut un entier :

integer expression expected
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...
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 !
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 803
[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]$
;-))
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 803
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 ;-(
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