925 votes

Comparaison des nombres en bash

Je commence à apprendre à propos de l'écriture de scripts pour le bash terminal, mais je ne peux pas travailler sur la façon d'obtenir les comparaisons pour fonctionner correctement. Je suis sûr que c'est très à la base de nombreux d'entre vous, je n'arrive pas à trouver la réponse à ma question, n'importe où (ou au moins je ne suis pas totalement sûr de ce que pour la recherche). Le script que j'utilise est:

echo "enter two numbers";

read a b;

echo "a=$a";
echo "b=$b";

if [ $a \> $b ];

then 

echo "a is greater than b";

else 

echo "b is greater than a";

fi;

Le problème que j'ai, c'est qu'il compare le nombre à partir du premier chiffre, c'est à dire 9 est plus grand que 10000, mais 1 est plus grand que 09. Comment puis-je convertir des nombres dans un type pour faire une comparaison? Je me rends compte que c'est probablement m'énerve à être si simple, mais toute aide serait grandement appréciée!

1412voto

jordanm Points 6490

En bash, vous devriez faire votre vérification dans un contexte arithmétique :

 if (( a > b )); then
    ...
fi
 

Pour les shells POSIX qui ne prennent pas en charge (()) , vous pouvez utiliser -lt et -gt .

 if [ "$a" -gt "$b" ]; then
    ...
fi
 

Vous pouvez obtenir une liste complète des opérateurs de comparaison avec help test .

62voto

Il y a aussi une bonne chose que certaines personnes pourraient ne pas savoir:

 echo $(( a < b ? a : b ))
 

Ce code imprimera le plus petit nombre sur a et b

46voto

konsolebox Points 21338

En ce qui concerne bash, je préfère cela car il s’adresse davantage comme une opération conditionnelle, contrairement à (( )) qui est plutôt arithmétique.

 [[ N -gt M ]]
 

Sauf si je fais des choses complexes comme

 (( (N + 1) > M ))
 

Mais tout le monde a ses propres préférences. Ce qui est triste, c'est que certaines personnes imposent leurs normes non officielles.

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