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 $((...))
).