273 votes

comparer une chaîne sous unix

J'utilise SH shell et j'essaie de comparer une chaîne avec la valeur d'une variable, mais la condition if est-elle toujours exécutée sur true? Pourquoi ?

par exemple le code.

 Sourcesystem="ABC"

if [ "$Sourcesystem" -eq 'XYZ' ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;

echo Sourcesystem Value is  $Sourcesystem ;
 

même cela ne fonctionne pas:

 Sourcesystem="ABC"

if [ 'XYZ' -eq "$Sourcesystem" ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;

echo Sourcesystem Value is  $Sourcesystem ;
 

Deuxièmement, pouvons-nous associer cela à NULL ou à une chaîne vide?

382voto

Mithrandir Points 10545

Vous devez utiliser l'opérateur = pour la comparaison de chaînes:

 Sourcesystem="ABC"

if [ "$Sourcesystem" = "XYZ" ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;
 

man test indique que vous utilisez -z pour faire correspondre les chaînes vides.

98voto

Banthar Points 9141

-eq est utilisé pour comparer des nombres entiers. Utilisez = place.

33voto

Eswar Yaganti Points 1

J'ai eu le même problème, fais ça

 if [ 'xyz'='abc' ];
then
echo "match"
fi
 

remarquez l'espace blanc, il est important de ne pas utiliser d'espace dans ce cas après ou avant le signe =

consultez ce lien

http://tldp.org/LDP/abs/html/comparison-ops.html

12voto

codaddict Points 154968

-eq est l'opérateur de comparaison shell pour comparer les entiers. Pour comparer des chaînes, vous devez utiliser = .

3voto

Jason Points 3573

-eq est un opérateur de comparaison mathématique. Je ne l'ai jamais utilisé pour la comparaison de chaînes, m'appuyant sur == et != pour les comparaisons.

 if [ 'XYZ' == 'ABC' ]; then   # Double equal to will work in Linux but not on HPUX boxes it should be if [ 'XYZ' = 'ABC' ] which will work on both
  echo "Match"
else
  echo "No Match"
fi
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X