O comando [
/ shell builtin tem testes de comparação, então você pode apenas fazer
if [ "$REPLY" -ge 1 -a "$REPLY" -le 32 ]; then REPLY=-2;
elif [ "$REPLY" -ge 33 -a "$REPLY" -le 48 ]; then REPLY=-1; fi
onde -ge
significa maior ou igual a (e assim por diante). O -a
é lógico "e". O comando [
é apenas um comando, não uma sintaxe especial (na verdade, é o mesmo que test
: check out man test
), portanto, NECESSITA o espaço após ele. Se você escrever [$REPLY
, ele tentará encontrar um comando chamado [$REPLY
e executá-lo, o que não funcionará. O mesmo vale para fechar ]
.
Edit: para testar se o número é inteiro (se isso pode acontecer no seu código), primeiro faça o teste
if [[ "$REPLY" =~ ^[0-9]+$ ]]; then
existing code
else echo "$REPLY is not an integer" >&2 && exit 1; fi
É claro que todas essas expressões de colchetes retornam 0 (verdadeiro) ou 1 (falso) e podem ser combinadas. Não só você pode colocar tudo no mesmo suporte, você também pode fazer
if [[ "$REPLY" =~ ^[0-9]+$ ]] && [ "$REPLY" -ge 1 -a "$REPLY" -le 32 ]; then ...
ou algo similar.