Rechercher : dans
Par :

Tester l'égalité de deux chaines en bash

Dernière réponse le 20 mai 2008 à 13:39:00 Arrakis, le 20 mai 2008 à 11:30:18 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 2.0.0.14

Meilleures réponses pour « Tester l'égalité de deux chaines en bash » dans :
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Vérifier si un nombre entier est un nombre premier en C VoirDéfinition nombre premier Algorithme 1 : les diviseurs compris entre 2 et N-1 seront testés Algorithme 2 : les diviseurs pairs ne seront pas testés, la recherche se limitant aux diviseurs impairs Algorithme 3 : les diviseurs impairs jusqu'à la...

1

lami20j, le 20 mai 2008 à 11:32:03

Salut,

as-tu essayé?

if [ "$a" eq "total" ]
--
106485010510997108

Répondre à lami20j

2

Arrakis, le 20 mai 2008 à 11:32:35

Ah, petit problème d'affichage, lorsqu'il y a un lien c'est qu'il y a 2 crochets ouvrants et 2 fermants..

Répondre à Arrakis

3

Arrakis, le 20 mai 2008 à 11:34:45

Non, avec -eq il veut un entier :

integer expression expected

Répondre à Arrakis

4

jipicy, le 20 mai 2008 à 11:40:00

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]$
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

5

Arrakis, le 20 mai 2008 à 12:09:30

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...

Répondre à Arrakis

6

Arrakis, le 20 mai 2008 à 12:14:37

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 !

Répondre à Arrakis

8

jipicy, le 20 mai 2008 à 12:26:17

[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]$
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

7

jipicy, le 20 mai 2008 à 12:15:54

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 ;-(
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

9

Arrakis, le 20 mai 2008 à 13:37:06

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

Répondre à Arrakis

10

 jipicy, le 20 mai 2008 à 13:39:00

De rien ;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy