我当前的脚本
checkargv='^[0-9]+$'
if ! [[ $1 =~ $checkargv ]]
then
echo "[!] How many times? $0 [number]" >&2
exit 1
fi
for (( i=1;i<=$1;i++ ))
do
x=$[($RANDOM % 100) + 1]
./script.sh $x
done
我的 argv $1 现在接受从 0 到 0 到 100 之间的任何数字都没关系,我怎样才能使 argv 只接受从 0 到 100 的数字
答案1
if [ "$1" -lt 1 ] || [ "$1" -gt 100 ]; then
echo 'error (out of range)' >&2
exit 1
fi
这假设 in 中的内容$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 shell 中的 shell 算术扩展会将以 0 开头的数字视为八进制(0100 对于 来说是 100 [
,但对于 64 来说是 64 $((...))
)。
答案2
使用算术代替正则表达式:
if ! (( num >= 0 && num <= 100 ))
(这假设 num 是数字。如果您还需要检查以确保 $num 是数字,则也可以使用正则表达式。)