如何在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
相关产品推荐
相关产品推荐

