Linux下取得前一天的日期,用于零点备份

 

=================================================
本文为HeYuanHui原作

转载必须确保本文完整并完整保留原作者信息及本文原始链接!

NN:      khler
E-mail: khler@163.com
QQ:     23381103
MSN:   pragmac@hotmail.com
=================================================

 

    自动备份都喜欢在夜里0点,备份当天的日志,但是当系统到了夜里0时0分时,日期已经是第二天了,所以必须减1,当然了,日期的减1可没这么简单,什么月初第一天减1不一定是31,还可能是30,或者29,甚至28,前一个月当然也不能简单的减1完事,还得考虑年份...

    Linux里面就有个相当牛x的命令:"1 days ago",嘿嘿

 

ubuntu:

 


hyh@hyh
- Ubuntu: ~ $ date
2011年 02月 17日 星期四 
10 : 40 : 40  CST
hyh@hyh
- Ubuntu: ~ $ date  -- date  " 1 days ago "
2011年 02月 16日 星期三 
10 : 40 : 59  CST
hyh@hyh
- Ubuntu: ~ $

 

 

CenOS:

 



[root@localhost 
~ ] #  date --date "1 days ago"
2011年 02月 16日 星期三  10 : 43 : 29  CST
[root@localhost 
~ ] #  dd=$(date --date "1 days ago" +%Y-%m-%d)

[root@localhost 
~ ] #  echo $dd
2011 - 02 - 16
[root@localhost 
~ ] #  

 

 

 

 

看看下面怎么实现就知道有多复杂,上面的命令有多爽了:

 

# !/bin/sh

#  ydate: A Bourne shell script that
#
 prints yestarday's date
#
 Output form: Month Day Year
#
 From Focus on Unix: http://unix.about.com

#  Set the current month day and year.
month = `date  +% m`
day
= `date  +% d`
year
= `date  +% Y`

#  Add 0 to month. This is a
#
 trick to make month an unpadded integer.
month = `expr $month  +  0`

#  Subtract one from the current day.
day = `expr $day  -   1 `

#  If the day is 0 then determine the last
#
 day of the previous month.
if  [ $day  - eq 0 ]; then

#  Find the preivous month.
month = `expr $month  -   1

#  If the month is 0 then it is Dec 31 of
#
 the previous year.
if  [ $month  - eq 0 ]; then
month
= 12
day
= 31
year
= `expr $year  -   1

#  If the month is not zero we need to find
#
 the last day of the month.
else
case $month 
in
1 | 3 | 5 | 7 | 8 | 10 | 12 ) day = 31 ;;
4 | 6 | 9 | 11 ) day = 30 ;;
2 )
if  [ `expr $year  %   4 - eq 0 ]; then
if  [ `expr $year  %   400 - eq 0 ]; then
day
= 29
elif  [ `expr $year  %   100 - eq 0 ]; then
day
= 28
else
day
= 29
fi
else
day
= 28
fi
;;
esac
fi
fi

#  Print the month day and year.
echo $month $day $year
exit 0 

 

 

当然还有减一个时区的,也挺有意思:

$#看当前时区
$echo $TZ
CST-8
$#显示当前时间
$date
Mon Apr 2 15:48:36 CST 2002
$#改变当前时区,
TZ=CST+16;export TZ
$#显示当前时间(中间未改变系统时间,但date命令的显示已为昨天)
Mon Apr 1 15:48:33 CST 2002

转载于:https://www.cnblogs.com/khler/archive/2011/02/17/1956744.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值