Ulrich Schwarz realmente respondeu à pergunta já em seu comentário. Apenas deixe de fora o 2>/dev/null
e veja o que acontece quando $rnum
não é um inteiro. Considere o seguinte exemplo escrito em uma sessão bash
interativa:
$ rnum='foo'
$ [ "$rnum" -eq "$rnum" ]
-bash: [: foo: integer expression expected
$ echo $?
2
Se você estiver procurando por um método alternativo para testar se um valor é um inteiro, a Prashant Band já deu um. No entanto, eu prefiro uma solução mais portátil (uma que não dependa do operador =~
):
expr "X$rnum" : 'X[-+]\{0,1\}[0-9]\{1,\}$' >/dev/null || {
echo 'rnum is not a number' >&2
exit 1
}
Observe que valores estranhos como -0
, +0
e 000
são tratados como inteiros. No entanto, esse é o mesmo comportamento que você teria usando o constructo original apresentado em sua pergunta.