Shell脚本:根据输入时间段备份压缩日志文件 -Linux版
Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。
首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程 序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第 一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上",这个符号表明下一行与此行会合并为同一行
#将所需目录中选中的日期内文件夹打包(tar包) 并按输入时间间隔分段 #1 所需目录 #2 起始日期 #3 截止日期 #4 ---时间间隔(月份) #5 ---输出目录 #!/bin/bash input_dir=$1 #第一个参数 date_start=$2 #第二个参数 date_end=$3 #结束日期格式转换 end=$(date +%s -d "${date_end}") start=$(date +%s -d "${date_start}") #input split interval m=3 #时间间隔参数 3:表示每3个月一个压缩包 output_dir="/calogs/test/test2" echo "===START===" cd $input_dir value=$(($end-$start)) #时间相隔天数 #删除操作 while test $value -gt 0 do mthago=$(date +%Y%m%d -d "${date_start} ${m} months") mthago=$(date +%Y%m%d -d "${mthago} 1 days ago") #转换为日期格式 mthago_time=$(date +%s -d "${mthago}") #比较三月后日期是否大于结束日期 comp1=$(($end-$mthago_time)) if test $comp1 -le 0 then mthago=$date_end #如果小于则赋值为结束日期 mthago_time=$(date +%s -d "${mthago}") fi outdir=$output_dir/${input_dir##*/}-$date_start-$mthago.tar #tar包名称 # echo $outdir if test -f $outdir then rm -f $outdir fi date_start=$(date +%Y%m%d -d "${mthago} 1 days ") #获取开始某日期后一天 1为变量(整数) start=$(date +%s -d "${date_start}") value=$(($end-$start)) done #添加操作 date_start=$2 start=$(date +%s -d "${date_start}") value=$(($end-$start)) while test $value -ge 0 do mthago=$(date +%Y%m%d -d "${date_start} ${m} months") #获取开始某日期几个月后一天 ${m}为变量(整数) mthago=$(date +%Y%m%d -d "${mthago} 1 days ago") #转换为日期格式 mthago_time=$(date +%s -d "${mthago}") #比较三月后日期是否大于结束日期 comp1=$(($end-$mthago_time)) if test $comp1 -le 0 #$comp1是否小于0 then mthago=$date_end #如果小于则赋值为结束日期 mthago_time=$(date +%s -d "${mthago}") fi outdir=$output_dir/${input_dir##*/}-$date_start-$mthago.tar comp2=$(($mthago_time-$start)) while test $comp2 -ge 0 #$comp2是否大于等于0 do if test -d $date_start then tar -cf $outdir $date_start #初次生成tar包 echo "$outdir" date_start=$(date +%Y%m%d -d "${date_start} 1 days ") start=$(date +%s -d "${date_start}") comp2=$(($mthago_time-$start)) while test $comp2 -ge 0 do if test -d $date_start #判断文件夹是否存在 then tar -uf $outdir $date_start #往tar包中追加文件 #echo "[ $date_start ]" fi date_start=$(date +%Y%m%d -d "${date_start} 1 days ") start=$(date +%s -d "${date_start}") comp2=$(($mthago_time-$start)) done else date_start=$(date +%Y%m%d -d "${date_start} 1 days ") start=$(date +%s -d "${date_start}") comp2=$(($mthago_time-$start)) fi done value=$(($end-$start)) done echo "===FINISHED==="
运行命令(sh文件后跟参数):
sh /calogs/new.sh /calogs/test 20160101 20161230