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

如何在Unix Shell脚本中存储当前日期天数至变量并用于条件判断

在Unix Shell脚本中根据日期/星期几执行特定命令的解决方案

嘿,我来帮你搞定这个问题!你提到用date +'%u'没成功,大概率是变量赋值或者条件判断的语法没搞对,我给你梳理一下正确的实现步骤,还有要避开的常见坑。

第一步:正确获取并存储星期几到变量里

date +'%u'本身是对的,它会返回1(周一)到7(周日)的数字,但你得用命令替换把输出存到变量中。推荐用$()的写法(比反引号更清晰,嵌套时不容易出错):

# 获取当前星期几(1=周一,7=周日)
current_day=$(date +'%u')

如果你的shell版本比较旧,也可以用反引号写法:

current_day=`date +'%u'`

第二步:在IF条件中正确使用变量

Shell的条件判断要注意几个细节:[ ]或者[[ ]]前后必须有空格,数字比较要用算术比较符(比如-eq等于、-ne不等于),不能直接用==(那是字符串比较,虽然数字偶尔能用,但不规范)。

举个实际的例子,比如周一执行备份,周五清理日志:

#!/bin/bash

# 获取当前星期几
current_day=$(date +'%u')

# 根据星期几执行对应命令
if [ "$current_day" -eq 1 ]; then
    echo "今天是周一,启动全量备份任务..."
    # 替换成你的实际备份命令,比如:
    # tar -czf /backup/weekly_full.tar.gz /data
elif [ "$current_day" -eq 5 ]; then
    echo "今天是周五,清理过期日志..."
    # 替换成你的日志清理命令,比如:
    # find /var/log -name "*.log" -mtime +14 -delete
else
    echo "今天是星期$current_day,没有预设任务要执行"
fi

如果你要的是「月份的日期」而非星期几

如果你的需求是按每月的具体日期(比如1号、15号)执行命令,那应该用date +'%d',它返回两位数的日期(比如01、02...31)。这时候可以用两种方式判断:

方式1:字符串比较(注意是两位数字)

current_date=$(date +'%d')
if [ "$current_date" = "01" ]; then
    echo "今天是每月1号,执行月度统计任务..."
    # 你的月度命令写在这里
fi

方式2:转成数字比较(避免前导零的问题)

如果怕前导零导致的数字解析问题(比如08在某些shell里会被当成八进制),可以用$((10#$current_date))转成十进制:

current_date=$(date +'%d')
if [ "$((10#$current_date))" -eq 1 ]; then
    echo "今天是每月1号,执行月度统计任务..."
fi

注意不同系统的date差异

如果你用的是macOS或者BSD系统,date +'%u'可能不支持,这时候得用date +'%w',它返回0(周日)到6(周六)的数字,调整判断逻辑就行:

# macOS/BSD下获取星期几,0=周日,1=周一...6=周六
current_day=$(date +'%w')
if [ "$current_day" -eq 1 ]; then
    echo "今天是周一,执行任务..."
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:11:44