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

Bash脚本判断当前时间在指定区间时代码始终不执行问题排查

故障根因

你代码里的判断逻辑完全不生效,核心是两个问题:

  • [[ ]] 语法里的>、<是字典序(字符串ASCII顺序)比较,不是数值比较,而且你写的左边界8:29没有补前导零,和date +%H:%M输出的固定两位小时格式不匹配——date +%H:%M在上午8-9点输出的时间是08:xx、09:xx,字符串第一位是0,ASCII码比8小,所有10点前的时间和8:29做比较时,都会被判定为「小于8:29」,第一个判断条件直接不成立。举个实际例子:上午8点30分currenttime值为08:30,字符串比较时"08:30" > "8:29"返回结果为假,自然进不了代码块。
  • 就算你补了前导零,字符串比较判断时间区间的容错性极差,只要时间格式稍微不一致(比如多了空格、秒数没对齐)就会判断失效,不是可靠的实现方式。
可直接落地的修复方案

方案1(推荐):转成分钟数做纯数值比较

把时间统一换算成当日0点至今的累计分钟数,纯数值比较完全不受字符串格式影响,不会出逻辑问题:

# 转当前时间为总分钟数,加10#前缀强制按10进制解析,避免08、09被识别为8进制报错
current_total_min=$((10#$(date +%H)*60 + 10#$(date +%M)))
# 区间边界也转成总分钟:8:29=8*60+29=509,18:30=18*60+30=1110
if [[ $current_total_min -gt 509 && $current_total_min -lt 1110 ]]; then
    # 此处替换为你要执行的业务代码
    your_target_code
fi

方案2:对齐时间格式后做字符串比较

如果不想做数值换算,就把比较的边界时间补上前导零,和date +%H:%M的输出格式完全对齐,字典序比较才能正常生效:

currenttime=$(date +%H:%M)
# 注意左边界补零成08:29,和输出格式一致
if [[ "$currenttime" > "08:29" ]] && [[ "$currenttime" < "18:30" ]]; then
    # 此处替换为你要执行的业务代码
    your_target_code
fi

注意:如果你的需求是包含8:29和18:30两个边界点,把比较符换成>=/<=(字符串比较)或者-ge/-le(数值比较)即可。

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:42:16