博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过Shell判断某个日期是星期几
阅读量:6320 次
发布时间:2019-06-22

本文共 2407 字,大约阅读时间需要 8 分钟。

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

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

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

转载于:https://www.cnblogs.com/ebs-blog/archive/2012/03/13/2393527.html

你可能感兴趣的文章
git回退到某个历史版本
查看>>
HTML5基础(二)
查看>>
ue4(c++) 按钮中的文字居中的问题
查看>>
Android学习笔记——文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习
查看>>
Echart:前端很好的数据图表展现工具+demo
查看>>
Linux VNC黑屏(转)
查看>>
Java反射简介
查看>>
day8--socket网络编程进阶
查看>>
node mysql模块写入中文字符时的乱码问题
查看>>
分析Ajax爬取今日头条街拍美图
查看>>
内存分布简视图
查看>>
如何学习虚拟现实技术vr? vr初级入门教程开始
查看>>
第4 章序列的应用
查看>>
初识闭包
查看>>
hdu1874畅通工程续
查看>>
rails 字符串 转化为 html
查看>>
AOP动态代理
查看>>
Yii2.0 下的 load() 方法的使用
查看>>
华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery 及 root
查看>>
[转] ReactNative Animated动画详解
查看>>