Shell 关于日期的处理

一、背景

           最近开发中一个工程,要打一个jar包要把它变成自动任务去执行,其中需要用给定日期或者当前时间作为参数,利用日期创建文件夹,就需要用到shell脚本里面的日期处理。

二、处理思路及demo

           程序中的数据我们希望按日期进行归档,日期下的文件名会带部分日期格式的字符,这就创建以当前日期为参数的文件夹,并读取以日期为格式的字符串的文件,直接上示例:

run.sh

  1. CURRENTDAY=$1
  2. if [ -z $CURRENTDAY ]; then
  3.   CURRENTDAY=`date -d "0 day ago" +"%Y-%m-%d"`
  4. fi
  5. mkdir $CURRENTDAY
  6. cd $CURRENTDAY
  7. mkdir tempdata
  8. for((i=0;i<7;i++));
  9. do
  10. date=`date -d "$CURRENTDAY -$i day" +"%Y-%m-%d"`
  11. fileTemp = myData_$date
  12. # 执行使用 fileTemp 文件的代码或者生成以fileTemp命名的文件  
  13. # 使用时候可以用 ${fileTemp } 作为值 
  14. # 如 当我们需要hive 执行结果导出为文件时 可以用以下语句
  15. # hive -e " sql 语句前面
    where date='$date'  " >> ${fileTemp} 
  16. done

第1行:定义一个变量,用来接收脚本执行参数  设定日期参数

             如:sh run.sh 20180908

             $1 接收脚本的第一个参数, CURRENTDAY 这个变量就是 20180908

第2~4行:判断 脚本执行的时候是否传参,如未传参,就给变量赋值当前日期并设定格式 YYYY-MM-DD

第5行:创建以该日期为参数的文件夹

第6行:进入该文件夹

第7行:创建数据的临时文件夹,可能会执行多种数据,放入不同文件夹作区分

第8~16行:循环执行,从当前日期往前推算7天,代码片段中已给出说明。

#CURRENTDAY=$1
CURRENTDAY=20181002
MERGEDATE=20180202
if [ -z $CURRENTDAY ]; then
  CURRENTDAY=`date -d "0 day ago" +"%Y%m%d"`
fi

for((i=0;i<7;i++));
do
date1=`date -d "$CURRENTDAY +$i day" +"%Y%m%d"`
date2=`date -d "$MERGEDATE +$i day" +"%Y%m%d"`
echo $date1
echo $date2
done

 

你可能感兴趣的:(Shell,命令)