date是Shell中内置变量,用于获取日期时间。可通过以下命令,查看该内置变量的使用。
date --help
1、date的用法
date的用法:
date [OPTION]... [+FORMAT]
这里介绍下常用的 OPTION 选项 和 +FORMAT 格式。
1.1、OPTION 选项
-d | --date=STRING | 以字符串展示时间,需要设置展示的时间 |
-f | --file=DATEFILE | 以文件行的方式展示时间,文件行不为空,则显示时间 |
演示详情如下:
[root@node1 ~]# echo $(date -f /root/text.log +%F) 2021-11-06 2021-11-06 2021-11-06 2021-11-06 2021-11-06 [root@node1 ~]# cat text.log 12 2 3 4 5 [root@node1 ~]# echo $(date -d now +%F) 2021-11-06
-f,后需要跟文件,日期的展示次数与文件中的行数有关;
-d,后需要跟时间。1.2、FORMAT详情
格式 | 含义 |
%Y | 年份 2001 ~ 2020 |
%m | 月份 01 ~ 12 |
%d | 日期 01 ~ 31 |
%H | 小时 00 ~ 23 |
%M | 分钟 00 ~ 59 |
%S | 秒数 00 ~ 59 |
%F | full date 等价于 %Y-%m-%d YYYY-mm-dd日期 2020-11-06 |
%T | HH-MM-SS时间 %H:%M:%S |
FORMAT 演示详情如下:
[root@node1 ~]# echo $(date +%Y) 2021 [root@node1 ~]# echo $(date +%m) 11 [root@node1 ~]# echo $(date +%d) 06 [root@node1 ~]# echo $(date +%H) 08 [root@node1 ~]# echo $(date +%m) 11 [root@node1 ~]# echo $(date +%M) 02 [root@node1 ~]# echo $(date +%S) 02 [root@node1 ~]# echo $(date +%F) 2021-11-06 [root@node1 ~]# echo $(date +%T) 08:03:17
2、命令演示详情
2.1、获取今天日期
[root@node1 ~]# date -d now +%Y-%m-%d 2021-11-06 [root@node1 ~]# date +%F 2021-11-06
2.2、获取明天日期
[root@node1 ~]# date -d next-day +%Y-%m-%d 2021-11-07 [root@node1 ~]# date -d tomorrow +%Y-%m-%d 2021-11-07
2.3、获取昨天日期
[root@node1 ~]# date -d yesterday +%Y-%m-%d 2021-11-05 [root@node1 ~]# date -d last-day +%Y-%m-%d 2021-11-05
2.4、获取n天前、n天后的日期
# n days ago 表示 n 天前的一天 # 1天前,昨天 [root@node1 ~]# date -d "1 days ago" +%Y-%m-%d 2021-11-05 # 15天前的日期 [root@node1 ~]# date -d "15 days ago" +%Y-%m-%d 2021-10-22 # n 为负数,表示 n 天后的一天 # 15天后的日期 [root@node1 ~]# date -d "-15 days ago" +%Y-%m-%d 2021-11-21
2.5、获取下个月、上个月的今天日期
[root@node1 ~]# date -d next-month +%F 2021-12-06 [root@node1 ~]# date -d last-month +%F 2021-10-06
3、应用
需求:备份昨日的日志文件。
3.1、新建备份脚本
#!/bin/sh dates=$(date -d yesterday +%Y%m%d) echo "back date: $dates" tar -Pzcf /root/backup/$dates.tar.gz /usr/bigdata/logs/$dates/*
3.2、配置 crontab 文件
定时执行备份日志文件的脚本,这里为了方便展示效果,设置每2分钟执行一次。crontab -e
# 定时执行备份脚本
*/2 * * * * /root/backup_logs.sh