linux 判断 一周 时间,通过Shell判断某个日期是星期几

一个朋友有如下的备份需求:

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日是星期几

0818b9ca8b590ca3270a3433284dd417.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分别为星期一到星期六,不必劳神费力在脚本中判断当天是星期几了。

补充:

日期(Linux):

TODAY=`date +%Y%m%d`

YESTERDAY=`date -d'-1 day' +%Y%m%d`

LAST_MONTH=`date -d'-1 month' +%Y%m%d`

日期(bsd):

YESTERDAY=`date -v-1d +%Y%m%d`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值