Shell中日期运算

sh/bash/dash/ksh/zsh等Shell脚本
回复
yuffey
帖子: 193
注册时间: 2007-09-06 16:24
来自: 中国上海

Shell中日期运算

#1

帖子 yuffey » 2007-11-27 19:04

#!/bin/sh

###############################
# A Bourne Shell Script #
# 功能: 打印昨天的日期 #
# 输出格式: Year Month Day #
################################

# 设置当前的年、月、日
month=`date +%m`
day=`date +%d`
year=`date +%Y`

# 月份加0,使得月份成为“整型” :)
month=`expr $month + 0`

# 当前日期减一,得到昨天的日子
day=`expr $day - 1`

# 如果上面得到的昨天的日子为0的话就得考虑月份了
if [ $day -eq 0 ]; then
# 当前月份减一得到上一个月份
month=`expr $month - 1`
# 如果上面得到的上一个月份为0的话就得考虑年份了
if [ $month -eq 0 ]; then
month=12
day=31
year=`expr $year - 1`
# 如果月份非0就需要确定当前月份的天数
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

# 打印出昨天的年、月、日
echo $year $month $day
exit 0

上面是一个得到昨天日期的SHELL,其实十天后的可以类推的。
基本的思想是一样的。
1. expr运算符;
2. 关于跨月、跨年的判断。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2007-11-27 20:29

不如编程软件的库了。这个不是shell强项。
● 鸣学
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#3

帖子 bones7456 » 2007-11-29 10:02

这个.自己搞的话,容易出错的,练手还可以.
关注我的blog: ε==3
xiawuming
帖子: 32
注册时间: 2007-11-10 10:57

#4

帖子 xiawuming » 2007-12-07 21:51

直接用date命令不就行了?
回复