我们有时候在写批处理 Shell 脚本时,可能需要获取指定日期前(后) N 天/月/年的日期,这里的 N 可以是 1 天/月/年、2 天/月/年、3 天/月/年等等。方法其实很简单,这里做一个简单记录。基于这个语法,我们也可以写一个循环,将指定日期 N 天内的数据都做一个处理。

一、获取 N 天前(后)日期
首先是获取当前日期:

DATE=$(date +%Y%m%d)

这个命令就会将 DATE 赋值为 20190904,%Y%m%d 就是这个日期的格式,相应的还有%Y%m(年月,如 201909),更多的可以自己搜一搜写法。

获取这个日期 N 天后的日期(${DATE} 可以换成任易日期,如 20190101):

DATE_TMP=$(date -d "${DATE} N days" "+%Y%m%d")

获取这个日期 N 前后的日期(${DATE} 可以换成任易日期,如 20190101):

DATE_TMP=$(date -d "${DATE} N days ago" "+%Y%m%d")

举个例子:

获取当前日期 1 天后的日期:

DATE_TMP=$(date -d "${DATE} 1 days" "+%Y%m%d")

获取当前日期 1 天前的日期:

DATE_TMP=$(date -d "${DATE} 1 days ago" "+%Y%m%d")

举一反三:

获取这个日期 N 月后的日期:

DATE_TMP=$(date -d "${DATE} N month" "+%Y%m%d")

获取这个日期 N 月前的日期:

DATE_TMP=$(date -d "${DATE} N month ago" "+%Y%m%d")

获取这个日期 N 年后的日期:

DATE_TMP=$(date -d "${DATE} N year" "+%Y%m%d")

获取这个日期 N 年前的日期:

DATE_TMP=$(date -d "${DATE} N year ago" "+%Y%m%d")

二、循环处理 N 天内数据
简单的一个处理指定日期 N 天内数据的 Shell 脚本写法:

DATE=$(date +%Y%m%d)
for i in {1..5}
do
DATE_TMP=$(date -d "${DATE} ${i} days ago" "+%Y%m%d")
cd /root/backup
rm -rf *${DATE_TMP}*
done

基于这个脚本,再结合 Linux 的 crontab 命令(用法:Linux 利用 crontab 实现定时任务格式与用法简介),就可以实现例如每 7 天将当前日期 5 天内的数据删除。

Linux Shell获取指定日期 N 天/月/年前(后)的日期的更多相关文章

  1. linux中用shell获取昨天、明天或多天前的日期

    linux中用shell获取昨天.明天或多天前的日期 时间 -- :: BlogJava-专家区 原文 http://www.blogjava.net/xzclog/archive/2015/12/0 ...

  2. linux shell获取show slave status方法

    linux shell获取show slave status方法<pre>#!/bin/basharray=($(mysql -u数据库账号 -p数据库密码 -e "show s ...

  3. shell 获取指定ip的丢包率

    shell 获取指定ip的丢包率 丢包率大于10%就重新网络 使用sed 替换字符串 [[ $(ping -c 10 -W 1 baidu.com | awk '$6 ~ /%/{print $6}' ...

  4. linux shell获取时间

    获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量DATE=$(date +%Y%m%d) 有时候我们需要使用今天之前或者往后的日期,这时可以使用 ...

  5. linux shell获取键盘输入

    linux shell从键盘获取输入 代码1: #!/bin/bash #提示“Input your choice:”,把用户的输入保存入变量choice_user中read -p "Inp ...

  6. Shell获取指定区间随机未占用的端口号

    说明 最近在写Jenkins自动运维的脚本,由于是用的docker,部署的时候启动容器端口号冲突会导致部署失败,用的微服务也不在乎端口什么的,只求部署成功,所以想了很久,参考了一些文章,还有运维大哥的 ...

  7. Shell 获取指定行的内容

    需求: 有一个文件,根据指定的字符串,得到该字符串上两行的内容. 文件内容如下: linux-56:# cat sys.ttconnect.ini # Copyright (C) 1999, 2006 ...

  8. linux shell 获取进程pid

    1.通过可执行程序的程序名称 a.运行程序 b.获取进程id号 c.pidof相关知识:http://www.cnblogs.com/yunsicai/p/3675938.html 2.有些程序需要在 ...

  9. Shell获取指定时间

    时区基本知识 相差一个时区(经度15度)时间相差一小时.简单计算口诀:1.同一个时区的相差时间用减法,2.不同时区的相差时间用加法.3东加西减.例如一,东八区是8点,问东1区几点.根据上面口诀1,算: ...

  10. linux shell获取用户输入

    一.获取用户输入1.基本读取read命令接收标准输入的输入,或其它文件描述符的输入.得到输入后,read命令将数据输入放入一个标准变量中.[root@rac2 ~]# cat t8.sh #!/bin ...

随机推荐

  1. vue配置proxy实现跨域

  2. C++跨DLL内存所有权问题探幽(一)DLL提供的全局单例模式

    最近在开发的时候,特别是遇到关于跨DLL申请对象.指针.内存等问题的时候遇到了这么一个问题. 问题 跨DLL能不能调用到DLL中提供的单例? 问题比较简单,就是我现在有一个进程A,有DLL B DLL ...

  3. C#排序算法6:快速排序

    快速排序由C. A. R. Hoare在1960年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分 ...

  4. 【MLA】内存泄漏检查

    项目地址:skullboyer/MLA (github.com) 介绍 MLA 即 Memory Leak Analyzer,是一个排查内存泄漏的分析器 实现机制是在malloc时记录分配位置信息,在 ...

  5. 【SHELL】在指定格式的文件中查找字符串

    在指定格式的文件中查找字符串 grep -nr "string" --include=*.{c,cpp,h} 在排除指定格式的文件中查找字符串 grep -nr "str ...

  6. Android——共享参数SharedPreferences

    4数据存储 共享参数SharedPreferences.数据库SQLite.SD卡文件.App的全局内存 4.1共享参数SharedPreferences SharedPreferences是一个轻量 ...

  7. [转帖]RabbitMQ学习笔记:内置Prometheus支持rabbit_prometheus插件

    从3.8.0开始,RabbitMQ提供内置的Prometheus和Grafana支持. rabbitmq_prometheus插件中提供了对Prometheus指标收集的支持.该插件以Promethe ...

  8. [转帖]关系模型到 Key-Value 模型的映射

    https://cn.pingcap.com/blog/tidb-internal-2 在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以 ...

  9. Find 查找并且展示最近24小时内创建的文件信息

    1. 命令为: find /gscloud/tools/patchinstall/patchfiles/ -maxdepth 1 -mtime 1 |cut -c40- >/deploy/pat ...

  10. SAP Gateway Trace

    最近在SAP PE项目上遇到一个需求要求记录所有的ODATA(含S4/CLOUD API)的报文. Below T-codes recording logging and tracing: /IWFN ...