You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:27:25