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.