Bash脚本正则匹配异常:无法验证正整数或星号(1-31范围)
修复Bash脚本的日期参数校验逻辑
你的正则表达式有三个关键问题,导致判断一直失败:
*是正则的特殊元字符,直接写会被当成“匹配前面元素零次或多次”,必须转义成\*^[0-9]只能匹配单个数字开头,像10、31这类多位数根本匹配不上,得改成^[0-9]+$来匹配一到多个数字- 正则的或运算没分组,原表达式会被错误解析成“以数字开头”或者“任意字符重复多次结尾”,需要用
()把两个匹配规则包起来
另外,你还需要额外判断数字是否在1-31的范围内,只靠正则没法完成数值范围校验。
下面是修正后的完整代码:
# 先校验格式:要么是单个星号,要么是正整数 if [[ ! $DAY_OF_MONTH =~ ^(\*|[0-9]+)$ ]]; then echo "ERROR: DAY_OF_MONTH parameter must be a positive integer or an asterisk" exit 1 fi # 如果是数字,再校验是否在1-31范围内 if [[ $DAY_OF_MONTH != \* ]]; then if (( DAY_OF_MONTH < 1 || DAY_OF_MONTH > 31 )); then echo "ERROR: DAY_OF_MONTH must be between 1 and 31" exit 1 fi fi
这样修改后,就能正确接受*或者1-31之间的整数参数了。
内容的提问来源于stack exchange,提问作者dokgu
相关产品推荐
相关产品推荐

