Commençant par les arguments bash: -lt et -gt

24

Je commence par bash et j'ai trouvé ce qui suit:

if test $first -lt $second
then
  echo $first is lower than $second
else
  if test $first -gt $second
  then
    echo $first is higher than $second
  else
    echo $first and $second are equals
  fi
fi

Pour lire le script et l'exécuter, je sais ce qu'il fait, mais pas à quoi servent -lt et -gt.

Quelqu'un peut-il me dire quel est le nom de ce type d'outil et ce qu'il fait (-lt et -gt)? Merci!

user47579
la source
9
Désolé, mais je pense que cela vaut la peine de souligner que les echodéclarations du code répondent à votre question.
devnull
Il manque des guillemets autour des variables
Stéphane Chazelas

Réponses:

29

C'est court pour less thanet greater than. Il est utilisé pour la comparaison d'entiers dans bash. Vous pouvez en savoir plus en tapant man test:

   ....
   INTEGER1 -gt INTEGER2
          INTEGER1 is greater than INTEGER2
   ....
   INTEGER1 -lt INTEGER2
          INTEGER1 is less than INTEGER2
   ....
cuonglm
la source
7

Vous pouvez trouver la définition de -ltet -gtdans la documentation de la testcommande ( man test), ou dans la documentation de bash car il tests'agit d'une commande intégrée dans bash (comme dans la plupart des autres shells).

-ltet -gtsont des comparaisons numériques (inférieures à [et non égales], supérieures à [et non égales]). Il existe également des opérateurs inférieurs / supérieurs ou égaux -leet -ge, et des opérateurs égaux et non égaux -eqet -ne. Ce sont des opérateurs numériques, il y aura donc une erreur si l'un ou l'autre côté n'est pas un nombre et 9est considéré comme inférieur à 10.

La raison pour laquelle des noms comme ceux-ci -ltsont utilisés plutôt que l'habituel <est que le caractère <serait interprété comme une redirection. Les opérateurs =et !=existent aussi, mais ils effectuent une comparaison de chaîne: test 00 -eq 0est vrai alors test 00 = 0est faux.

Certains shells, y compris bash, ont également des opérateurs <et >qui effectuent une comparaison lexicographique de chaîne, ce qui test 9 \< 10est faux car 9trié avant 1(la barre oblique inverse empêche le caractère <d'être interprété comme un opérateur de redirection). Ces shells offrent également la syntaxe à double parenthèse pour les tests, par exemple [[ 9 < 10 ]](par opposition à [ 9 \< 10 ]), qui ne peuvent pas avoir de redirections à l'intérieur, donc il <n'est pas nécessaire de les citer.

Gilles 'SO- arrête d'être méchant'
la source
4

Ce ne sont que des opérateurs.

Simplement: gtet ltsignifie> (supérieur à) et <(inférieur à).

Vous pouvez consulter ici pour plus d'informations sur les opérateurs:

Point d'interrogation
la source