计算日期的shell程序

$ date_offset.sh 
usage() 

echo " 使用方法:"  
echo "  date_offset.sh YYYY/MM/DD offset"  
echo " /n举例:"  
echo "  date_offset.sh 2001/10/01 -1 返回: 2001/09/30"  
echo "  date_offset.sh 2001/10/01 5 返回: 2001/10/06/n"  
exit 2 


yesterday() 

YEAR=`echo $1|awk -F " /"  ' {print $1}'
MONTH=`echo $1|awk -F " /"  ' {print $2}'
DAY=`echo $1|awk -F " /"  ' {print $3}'
if [ $DAY -eq 1 ] 
then 
if [ $MONTH -eq 1 ] 
then 
YEAR=`expr $YEAR - 1` 
MONTH=12 
else 
MONTH=`expr $MONTH - 1` 
fi 
DAY=`echo /`cal $MONTH $YEAR/`|tail -n1|awk ' {print $NF}'
else 
DAY=`expr $DAY - 1` 
fi 
echo " $YEAR $MONTH $DAY" |awk ' {if (length($2)==1) $2=0$2;if (length($3)==1) $3=0$3;printf " %s/%s/%s" ,$1,$2,$3}'  


tomorrow() 

YEAR=`echo $1|awk -F " /"  ' {print $1}'
MONTH=`echo $1|awk -F " /"  ' {print $2}'
DAY=`echo $1|awk -F " /"  ' {print $3}'
LASTDAY=`echo /`cal $MONTH $YEAR/`|tail -n1|awk ' {print $NF}'
if [ $DAY -eq $LASTDAY ] 
then 
if [ $MONTH -eq 12 ] 
then 
YEAR=`expr $YEAR + 1` 
MONTH=1 
else 
MONTH=`expr $MONTH + 1` 
fi 
DAY=1 
else 
DAY=`expr $DAY + 1` 
fi 
echo " $YEAR $MONTH $DAY" |awk ' {if (length($2)==1) $2=0$2;if (length($3)==1) $3=0$3;printf " %s/%s/%s" ,$1,$2,$3}'  


# 检查参数数目 
if [ $# -ne 2 ] 
then 
echo " /n调用出错: 参数数目不对!/n"  
usage 
fi 

# 检查参数1长度 
if [ `expr length $1` -ne 10 ] 
then 
echo " /n调用出错: 日期格式不正确!/n"  
usage 
fi 

TMP_YEAR=`echo $1|awk -F " /"  ' {print $1}'
TMP_MONTH=`echo $1|awk -F " /"  ' {print $2}'
TMP_DAY=`echo $1|awk -F " /"  ' {print $3}'

if ! expr $TMP_YEAR + $TMP_MONTH + $TMP_DAY >/dev/null 2>&1 
then 
echo " /n调用出错: 日期格式不正确!/n"  
usage 
fi 

if [ `expr length $TMP_YEAR` -ne 4 ] 
then 
echo " /n调用出错: 日期格式不正确!/n"  
usage 
fi 

if [ $TMP_MONTH -lt 1 ] || [ $TMP_MONTH -gt 12 ] 
then 
echo " /n调用出错: 日期格式不正确!/n"  
usage 
fi 

LAST_DAY=`echo /`cal $TMP_MONTH $TMP_YEAR/`|tail -n1|awk ' {print $NF}'
if [ $TMP_DAY -lt 1 ] || [ $TMP_DAY -gt $LAST_DAY ] 
then 
echo " /n调用出错: 日期格式不正确!/n"  
usage 
fi 

# 检查参数2是否为数值 
expr $2 + 0 >/dev/null 2>&1 
if [ ! $? ] 
then 
echo " /n调用出错: 日期偏移量应为整数值!/n"  
usage 
fi 

TMP_DATE=$1 
if [ $2 -lt 0 ] 
then 
INC=-1 
COUNT=$2 
else 
INC=1 
COUNT=`expr 0 - $2` 
fi 
while [ $COUNT -lt 0 ] 
do 
if [ $INC -gt 0 ] 
then 
TMP_DATE=`tomorrow $TMP_DATE` 
else 
TMP_DATE=`yesterday $TMP_DATE` 
fi 
COUNT=`expr $COUNT + 1` 
done 
echo $TMP_DATE 
#在要SCO 5.0.5下测试通过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值