if [ "$1" -lt 1 ] || [ "$1" -gt 100 ]; then
echo 'error (out of range)' >&2
exit 1
fi
Isso pressupõe que a coisa em $1 seja, na verdade, um inteiro. Você pode verificar isso antes com
case "$1" in
("" | *[!0-9]*)
echo 'error (not a positive decimal integer number)' >&2
exit 1
esac
Isso acionará o exit se $1 contiver algo diferente de dígitos decimais ou estiver vazio.
Combinando estes:
case "$1" in
("" | *[!0-9]*)
echo 'error (not a positive decimal integer number)' >&2
exit 1
;;
*)
if [ "$1" -lt 1 ] || [ "$1" -gt 100 ]; then
echo 'error (out of range)' >&2
exit 1
fi
esac
Mas fazer um após o outro pode parecer melhor:
case "$1" in
("" | *[!0-9]*)
echo 'error (not a positive decimal integer number)' >&2
exit 1
esac
if [ "$1" -lt 1 ] || [ "$1" -gt 100 ]; then
echo 'error (out of range)' >&2
exit 1
fi
Tenha em atenção que [ operadores aritméticos sempre consideram números como decimais mesmo que iniciem com 0 , enquanto as expansões aritméticas da shell nas cascas POSIX considerariam números começando com 0 como octal (0100 é 100 para [ , mas 64 para $((...)) ).