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

Bash脚本如何判断小时数是否为偶数?求更优实现方案

解决Bash脚本偶数整点执行操作的优化方案

针对你的需求,这里有几种更健壮、简洁的实现方式,同时避免前导0导致的八进制数值错误:

方法1:直接获取无前导0的小时数(GNU Date适用)

利用GNU date的%-H格式符,直接输出不带前导0的十进制小时数,无需额外处理:

# 仅在偶数整点(分钟为0)执行操作
if (( $(date +%-H) % 2 == 0 )) && (( $(date +%M) == 0 )); then
    # 替换为你的操作命令
    echo "执行偶数整点任务"
fi

优点:代码最简洁,一步到位,避免前导0问题,同时自然兼容00点(会输出0,取余为0符合条件)。

方法2:强制十进制解析(兼容性更强)

如果你的环境不支持GNU date的%-H(比如BSD系统),可以在算术运算中用10#前缀强制bash将带前导0的小时数按十进制解析:

HOUR=$(date +%H)
MINUTE=$(date +%M)

if (( 10#$HOUR % 2 == 0 )) && (( MINUTE == 0 )); then
    # 执行你的操作
    echo "执行偶数整点任务"
fi

优点:兼容所有bash环境,无需修改date的输出格式,同时完美处理08、09这类前导0数值,也不会在00点出现空值问题。

方法3:字符串匹配(直观易懂)

直接匹配时间字符串是否为偶数整点的格式,无需算术运算:

case $(date +%H%M) in
    0000|0200|0400|0600|0800|1000|1200|1400|1600|1800|2000|2200)
        # 执行你的操作
        echo "执行偶数整点任务"
        ;;
    *)
        # 非目标时间,跳过
        ;;
esac

优点:逻辑直观,不需要理解算术运算的细节,适合新手阅读和维护。

补充说明

你之前用HEURE=${HEURE#0}的方法存在一个隐患:当时间为00:00时,去除前导0后会得到空字符串,此时进行取余运算会触发bash语法错误。上面的三种方法都能避免这个问题,同时更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:17:11