if [ "$1" -lt 1 ] || [ "$1" -gt 100 ]; then
echo 'error (out of range)' >&2
exit 1
fi
Это предполагает, что вещь в $1
на самом деле является целым числом. Вы можете проверить это заранее с помощью
case "$1" in
("" | *[!0-9]*)
echo 'error (not a positive decimal integer number)' >&2
exit 1
esac
Это вызовет exit
, если $1
содержит что-либо, кроме десятичных цифр, или пусто.
Сочетание этих:
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
Но делать одно за другим может выглядеть лучше:
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
Имейте в виду, что [
арифметические операторы всегда рассматривают числа как десятичные, даже если они начинаются с 0
, в то время как арифметические расширения оболочки в оболочках POSIX рассматривают числа, начинающиеся с 0, как восьмеричные (0100 равно 100 для [
, но 64 для$((...))
).
Я не уверен, как обрабатываются корпоративные пакеты в случае обновления, но для пакетов, которые, как вы уверены, не нужно обновлять, можно заблокировать номер версии, установленный с помощьюyum versionlock
плагина после установки и в случае обновления они пропускаются.