Começando com argumentos bash: -lt e -gt

24

Estou começando com o bash e achei o seguinte:

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

Para ler o script e executá-lo, eu sei o que ele faz, mas não para que servem -lt e -gt.

Alguém pode me dizer qual é o nome desse tipo de 'ferramenta' e o que eles (-lt e -gt) fazem? Obrigado!

user47579
fonte
9
Desculpe, mas vale a pena ressaltar que as echoinstruções no código respondem à sua pergunta.
devnull
Faltam aspas nas variáveis
Stéphane Chazelas

Respostas:

29

É curto para less thane greater than. É usado para comparação de números inteiros no bash. Você pode ler mais digitando man test:

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

Você pode encontrar a definição -lte -gtna documentação do testcomando ( man test) ou na documentação do bash, pois testé um comando interno no bash (como na maioria dos outros shells).

-lte -gtsão comparações numéricas (menor que [e não igual], maior que [e não igual]). Existem também operadores menos / maiores ou iguais -lee -ge, e operadores iguais e não iguais -eqe -ne. Como são operadores numéricos, haverá um erro se um dos lados não for um número e 9for considerado menor que 10.

A razão pela qual nomes como -ltsão usados ​​e não o habitual <é que o caractere <seria interpretado como um redirecionamento. Os operadores =e !=também existem, mas eles realizam uma comparação de cadeias: test 00 -eq 0é verdadeira enquanto test 00 = 0é falsa.

Alguns shells, incluindo o bash, também possuem operadores <e >que realizam uma comparação lexicográfica de strings, portanto, isso test 9 \< 10é falso porque 9foi classificado anteriormente 1(a barra invertida impede que o caractere <seja interpretado como um operador de redirecionamento). Esses shells também oferecem a sintaxe de colchetes duplos para testes, por exemplo [[ 9 < 10 ]](ao contrário de [ 9 \< 10 ]), que não podem ter redirecionamentos internos para <que não precisem ser citados.

Gilles 'SO- parar de ser mau'
fonte
4

Eles são apenas operadores.

Simplesmente: gte ltmédia> (maior que) e <(menor que).

Você pode procurar aqui mais informações sobre operadores:

Ponto de interrogação
fonte