shell脚本处理周相关的日期计算

#!/bin/bash

timer_start=`date "+%Y-%m-%d %H:%M:%S"`

# 计时器
timediff(){
    duration=$(($(date +%s -d "${3} ${4}") - $(date +%s -d "${1} ${2}")))
    echo "开始时间:${1} ${2}"
    echo "结束时间:${3} ${4}"
    if [[ $duration -lt 60 ]]
        then echo "执行耗时:${duration}s"
    elif [[ $duration -lt $((60*60)) ]]
        then m=$(($duration/60))
             s=$(($duration%60))
             echo "执行耗时:${m}m${s}s"
    else h=$(($duration/60/60))
         m=$(($(($duration%3600))/60))
         s=$(($duration%60))
         echo "执行耗时:${h}h${m}m${s}s"
    fi
}

# 给一个日期参数算周一
first_day_of_week(){
  b_diff=$((`date -d "${1}" +%u`-1))
  echo `date -d "${1} -${b_diff}days" "+%Y-%m-%d"`
}

# 算年周
yyyyww(){
  ww=`date -d "${1}" "+%V"`
  if [[ $((10#$ww)) -ge $((10#52)) ]]; then
    #statements
    yyyy=`date -d "${1} -7days" "+%Y"`
    yyyy_ww=${yyyy}${ww}
  elif [[ $((10#$ww)) -eq $((10#01)) ]]; then
      #statements
      yyyy=`date -d "${1} +7days" "+%Y"`
      yyyy_ww=${yyyy}${ww}
      else
        yyyy=`date -d "${1}" "+%Y"`
        yyyy_ww=${yyyy}${ww}
  fi
  echo $yyyy_ww
}

# 同比周日期
lst_yr_wkdt(){
  # 所在年周
  yyyy_ww=`yyyyww ${1}`
  # 所在年的第一天
  first_day_of_year=${yyyy_ww:0:4}-01-01
  # 所在周的第一天
  fst_wk_d=`first_day_of_week ${1}`
  # 算去年周数,去年周数就是两个周日期间隔周数
  if [[ `date -d "${first_day_of_year}" "+%V"` == 01 ]]; then
    # 如果1月1号是第1周则上周周数就是上一年的周数
    week_nums=`date -d "${first_day_of_year} -7day" "+%V"`
  else
    # 否则1月1号的周数就是上一年的周数
    week_nums=`date -d "${first_day_of_year}" "+%V"`
  fi
  # 根据去年周数算和去年同期日期相隔的天数
  datediff=$(($week_nums*7))
  # 算同期周日期
  tb_date=`date -d "${1} -${datediff}day" "+%Y-%m-%d"`
  echo $tb_date
}

# 取出本文件文件名
file_name=`basename $0`
# 根据本文件名得到需要同步的sql文件名
table_name=${file_name%.sh}
sql_name=${table_name}.sql
# 取本文件目录
dir_path=`dirname $0`
# 进入目录
cd $dir_path

# 算同期日期段
ystd=`date -d "-1day" "+%Y-%m-%d"`
fst_wk_d=`first_day_of_week $ystd`

# tb_begin_date=`lst_yr_wkdt $fst_wk_d`
# tb_end_date=`lst_yr_wkdt $ystd`

tb_begin_date=$((${fst_wk_d:0:4}-1))${fst_wk_d:4:6}
tb_end_date=$((${ystd:0:4}-1))${ystd:4:6}

echo "hive  -hivevar begindate=${tb_begin_date} -hivevar enddate=${tb_end_date} -f ${sql_name};"
hive  -hivevar begindate=${tb_begin_date} -hivevar enddate=${tb_end_date} -f ${sql_name};

#判断插入操作是否成功
if test $? -ne 0 ; then 
  echo "***FAIL***"
  timer_end=`date "+%Y-%m-%d %H:%M:%S"`
  timediff $timer_start $timer_end 
  exit 1
else
  echo "***SUCCESS***"
  timer_end=`date "+%Y-%m-%d %H:%M:%S"`
  timediff $timer_start $timer_end
fi

 

你可能感兴趣的:(shell)