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

Shell脚本分组条件时缺失']'错误及日期时间逻辑实现问题

问题分析与解决方案

你遇到的「缺失']'」错误,主要是因为bash条件判断的语法不符合规范,再加上数字比较误用了字符串运算符,不仅会触发语法报错,还可能隐藏逻辑隐患。下面一步步帮你修正:

错误原因拆解

  1. [ ]中不能直接用&&:POSIX标准的test命令(也就是[ ])里,多条件逻辑与要用-a;如果想用更直观的&&,得改用bash扩展的[[ ]]语法。
  2. 数字比较不能用</>:这两个是字符串比较运算符,比如"10"<"9"会被判定为true(因为ASCII码中"1"比"9"小),正确的数字比较应该用-lt(小于)、-gt(大于)。
  3. [ ]前后必须留空格:闭合的]前面必须加空格,否则shell会把它当成字符串的一部分,直接触发「缺失']'」的语法错误。

修正后的完整代码

#!/bin/bash

CURR_DAY=$(date '+%A')
NOW=$(date '+%H')
CURR_HOUR="09"

# 先判断是否是周五
if [[ "$CURR_DAY" == "Friday" ]]; then
    if [[ "$NOW" -lt 15 ]]; then
        # 周五且下午3点前,保留当前完整时间
        CURR_TIME=$(date '+%Y%m%d%H%M%S')
    else
        # 周五且下午3点后,用当天日期+09点的时分秒
        CURR_TIME=$(date '+%Y%m%d')${CURR_HOUR}$(date '+%M%S')
    fi
else
    # 非周五,自动计算下周五的日期,默认用09点的时间
    NEXT_FRIDAY=$(date -d "next Friday" '+%Y%m%d')
    CURR_TIME="${NEXT_FRIDAY}${CURR_HOUR}$(date '+%M%S')"
fi

echo "最终生成时间:$CURR_TIME"

代码细节说明

  • 用[[ ]]替代[ ]:支持更直观的逻辑运算符(&&/||)和字符串匹配,语法容错性更高
  • 数字比较用-lt:确保小时的比较是数值层面的,彻底避免字符串比较的bug
  • 下周五的计算:date -d "next Friday"是bash中获取下周五最简洁的方式,会自动处理当前是周六/周日的情况(比如周日执行时,next Friday就是5天后)
  • 时间拼接:把日期、固定小时、当前时分秒拼接成统一格式的时间字符串,符合你的需求

额外优化建议

如果不需要保留当前的分秒,可以把时分秒固定为0000,改成CURR_TIME="${NEXT_FRIDAY}${CURR_HOUR}0000",格式会更统一;另外开头的#!/bin/bash一定要加上,避免在不同shell环境下出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:13:35