Shell脚本攻略读书笔记六之Date命令

1. 主要命令

查看时区 date -R
更改时区 tzselect
查看时间 date
查看日历 cal
修改时间 date -s,其后接日期,表示将时间修改为指定的日期;若其后接时间,表示修改当前时间为 指定的时间

2. 简单应用

2.1 修改时间
[root@server4 local]# date -s 11/11/2020
Wed Nov 11 00:00:00 CST 2020
[root@server4 local]# date -s 0:16:12
Wed Nov 11 00:16:12 CST 2020
2.2 centos 7修改时区【这个可能与在系统初始化时有关】
[root@server4 local]# date
Sat Jul  7 04:51:47 EDT 2018
[root@server4 local]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@server4 local]# date
Sat Jul  7 16:54:18 CST 2018
2.3 格式化日期
  • 查看年
[root@server4 ~]# date +"%Y"
2018
  • 查看年月
[root@server4 ~]# date +"%Y%m"
201811
  • 查看年月日
[root@server4 ~]# date +"%Y%m%d"
20181130
  • 按照某种格式查看日期
[root@server4 ~]# date +"%Y-%m-%d"
2018-11-30

这其中的连字符可以使用任何的字符。比如+,-,*,/ 等等。

[root@server4 ~]# date +"%Y/%m/%d"
2018/11/30
[root@server4 ~]# date +"%Y=%m=%d"
2018=11=30
[root@server4 ~]# date +"%Y/%m/%d"
2018/11/30
[root@server4 ~]# date +"%Y+%m+%d"
2018+11+30
  • 查看年月日,时分秒
[root@server4 shells]# date "+%Y-%m-%d %H:%M:%S"
2018-12-01 10:24:03
2.4 使用date 计算日期
[root@server4 ~]# date -d"20181010 +1 day"  +"%Y%m%d"
20181011
[root@server4 ~]# date -d"20181010 -1 day"  +"%Y%m%d"
20181009
[root@server4 ~]# date -d"20181010 -1 month"  +"%Y%m%d"
20180910
[root@server4 ~]# date -d"20181010 -1 year"  +"%Y%m%d"
20171010

2.5 查看当前时间戳

  • date +%s 命令

3. 实战案例

3.1 根据日期,生成相应文件夹
[root@server4 logs]# cat makeLog.sh 
today=`date +"%Y%m%d"`
echo $today
ago_month=`date -d"1 month ago" +"%Y%m%d"`
echo $ago_month

tempDay=$ago_month
cd /data/software/kettle/data-integration/logs
for((i=0;$tempDay<$today;i++))
do
 tempDay=`date -d"$tempDay +1 day" +"%Y%m%d"`
 echo $tempDay
 `mkdir $tempDay`
done

执行效果就是:

[root@server4 logs]# ll
total 4
drwxr-xr-x. 2 root root   6 Dec 25 13:40 20181126
drwxr-xr-x. 2 root root   6 Dec 25 13:40 20181127
drwxr-xr-x. 2 root root   6 Dec 25 13:40 20181128
drwxr-xr-x. 2 root root   6 Dec 25 13:40 20181129
···
drwxr-xr-x. 2 root root   6 Dec 25 13:40 20181224
drwxr-xr-x. 2 root root   6 Dec 25 13:40 20181225
-rwxr--r--. 1 root root 279 Dec 25 13:40 makeLog.sh
3.2 计算job运行时间

脚本如下:

[root@server4 shells]# cat test4.sh
#!/bin/bash
start=`date +%s`
echo start_time:$start
res=0

for((i=0;i<100000;i++))
do
 res=$(($res+$i))
done
echo "sum of(1,1000)is:" $res


end=`date +%s`
echo end_time:$end

spend=$(($end-$start))
echo spend is:$spend

运行结果如下:

[root@server4 shells]# ./test4.sh
start_time:1545821606
sum of(1,1000)is: 4999950000
end_time:1545821607
spend is:1