设为首页 收藏本站
查看: 1943|回复: 0

通过Shell判断某个日期是星期几

[复制链接]

尚未签到

发表于 2015-4-29 11:32:12 | 显示全部楼层 |阅读模式
  一个朋友有如下的备份需求:
  1. RMAN备份片统一存放在/datafile/这个路径下
2. 然后每周六归档备份完毕后,把上周日到本周六的备份文件统一cp到一个目录下(/datafile/tarfile),然后把这个目录gtar压缩打包,以当天日期命名比如:prod_yyyymmdd.tar.gz  
3. 把prod_yyyymmdd.tar.gz传到备份服务器,将/datafile/tarfile/下面的文件清空;
4. 定期将/datafile/下面备份成功的文件(/datafile/目录只保留一个月以内的备份片)
  但是有个问题卡住了,如何判断某个日期是星期几? 我觉得通过这个方法去操作,不太方便,写法也比较复杂;先不考虑rman的备份思路,下面我们解决这个问题
  -----------------------------------------------------------------------------------------
  有两种方法:
1.通过date命令获取,获取结果:0为星期日,1-6为星期一至星期六。
date +%w 取得当天是星期几
date -d 20120311 +%w 取得2012年3月11日是星期几
DSC0000.png
  2.通过脚本获取
vim c_test.sh 创建脚本,输入以下所贴出的代码
chmod +x c_test.sh 给予脚本执行权限
./c_test.sh 20120311 取得2012年3月11日是星期几
  以下是该脚本的代码(其实通过这个脚本我们就可以看出从日期获取星期几的计算方法了):
  



#!/bin/bash
# SAVE THIS CODE AS c_test.sh
#
# Uses Zellers Congruence calculation to use a date and give
# the day of the week that date was.
#
# This function expects 1 Arguments,
# YYYYMMDD
# example:20120311
# then
# Returns a value between 0 and 6 to represent the day of the
# week where 0=Sun,1=Mon,...6=Sat
#
# e.g c_test.sh 20120311
#
# This formula is Year 2000 compliant.
# It is not compliant using dates previous to Oct 1752  
#
export YMD=$1
export YEAR=`echo $YMD|cut -c0-4`
export MONTH=`echo $YMD|cut -c5-6`
export DAY=`echo $YMD|cut -c7-9`  
# Adjust Month such that March becomes 1 month of
# year and Jan/Feb become 11/12 of previous year
# =============================================  
if [ $MONTH -ge 3 ];then
  MONTH=`expr $MONTH - 2`
else
  MONTH=`expr $MONTH + 10`
fi  
if [ $MONTH -eq 11 ] || [ $MONTH -eq 12 ] ; then
  YEAR=`expr $YEAR - 1`
fi
# ==============================================  
# Split YEAR into YEAR and CENTURY
# ================================
CENTURY=`expr $YEAR / 100`
YEAR=`expr $YEAR % 100`
# ================================  
# Black Magic Time
# ================
#Z=(( 26*$MONTH - 2 ) / 10) + $DAY + $YEAR + ( $YEAR/4 ) + ( $CENTURY/4 ) - (2 * $CENTURY) + 77) % 7
Z=`expr \( $MONTH \* 26 - 2 \) / 10`
Z=`expr $Z + $DAY + $YEAR`
Z=`expr $Z + $YEAR / 4`
Z=`expr $Z + $CENTURY / 4`
Z=`expr $Z - $CENTURY - $CENTURY + 77`
Z=`expr $Z % 7`
if [ $Z -lt 0 ] ; then
  Z=`expr $Z + 7`
fi
# ================  
echo $Z
# Sun 0
# Mon 1
# Tue 2
# Wed 3
# Thu 4
# Fri 5
# Sat 6
# ========================
  最后,想特别提醒一点的是,如果是采用crontab计划任务的方式来调用某个脚本执行,并希望在指定的星期几运行的话,直接通过crontab -e修改最后一个 * 号就可以实现,同样是0为星期天,1-6分别为星期一到星期六,不必劳神费力在脚本中判断当天是星期几了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-61891-1-1.html 上篇帖子: shell脚本_循环_if判断 下篇帖子: python调用linux shell脚本,并返回结果一例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表