Je fais une comparaison d'entiers en bash (en essayant de voir si l'utilisateur s'exécute en tant que root), et j'ai trouvé deux façons différentes de le faire:
Double égal:
if [ $UID == 0 ]
then
fi
-eq
if [ $UID -eq 0 ]
then
fi
Je comprends qu'il n'y a pas de> = ou <= dans bash, seulement -ge et -le, alors pourquoi y a-t-il un ==
S'il y a un -eq
?
Y a-t-il une différence dans la façon dont il compare les deux côtés?
==
est un alias spécifique à bash
pour =
, qui effectue une comparaison de chaînes (lexicale) au lieu de -eq
comparaison numérique. (C'est à l'envers de Perl: les opérateurs de style Word sont numériques, les opérateurs symboliques lexicaux.)
Pour élaborer sur réponse de bollovan ...
Il n'y a pas >=
ou <=
opérateur de comparaison pour les chaînes. Mais vous pouvez les utiliser avec le ((...))
commande arithmétique pour comparer les entiers.
Vous pouvez également utiliser les autres opérateurs de comparaison de chaînes (==
, !=
, <
, >
, mais non =
) pour comparer des entiers si vous les utilisez dans ((...))
.
Exemples
[[ 01 -eq 1 ]]
et (( 01 == 1 ))
faire des comparaisons entières. Les deux sont vrais.[[ 01 == 1 ]]
et [ 01 = 1 ]
faire des comparaisons de chaînes. Les deux sont faux.(( 01 -eq 1 ))
et (( 01 = 1 ))
renverra une erreur.Remarque: La syntaxe du double crochet [[...]]
et la syntaxe des doubles parenthèses ((...))
ne sont pas pris en charge par tous les shells.
Si vous voulez faire une comparaison entière, vous utiliserez mieux (()), où vous pouvez également utiliser> = etc.
Exemple:
if (( $UID == 0 )); then
echo "You are root"
else
echo "You are not root"
fi