linux shell 日期比较大小,在Shell中使用日期运算和比较详解
脚本内容大概主要包括以下: 1、有且只有两个输入参数,都是必输项。 2、参数的格式是日期且格式是“yyyyMMdd"(如:20140101) 3、第二个参数一定要比第一个参数晚 4、最终的执行结果就是将两个日期区间的日期打印出来。
#!/bin/bash
startDate="$1"
endDate="$2"
DATE_FMT="%Y%m%d"
source ./log.sh
export DEBUG="true"
function showUsage() {
warn ""
warn "------------------------ Usage ----------------------------- "
warn " Syntax: checkInputDates.sh "
warn ""
warn " Remark: "
warn " 1.Two arguments are required and must with format 'YYYYmmDD'."
warn " 2.Named 'end date' argument must be greater then or equal to 'start date' argument."
warn ""
warn " Example: checkInputDates.sh 20140102 20140901"
warn "------------------------------------------------------------ "
}
DATE_FMT=${DATE_FMT:-"%Y%m%d"} ##Default with format "%Y%m%d", eg: 20140102
function checkDateValid() {
local myDate=$1
local exp="date +$DATE_FMT -d $myDate"
if [ "$myDate" == "`$exp`" ]; then
echo "1"
else
echo "0"
fi
}
###
## TODO: It's not correctly.
##
function datesDiff() {
local d1=`date -d "$1" +%s`
local d2=`date -d "$2" +%s`
##debug "Dates: "$d1 $d2
local cr=$(($d1-$d2)); ##Diff in 'day' unit.
echo $cr
}
##
# Return the day after input date.
# Usage: toTomorrow
##
function compareDates() {
## `date -d " 20141225 1 day" +%Y%m%d`
local cr=$(datesDiff $1 $2); ##Diff in 'day' unit.
##debug "Compare: $(($(date +$DATE_FMT -d $1) - $(date +$DATE_FMT -d $2)));";
if [[ $cr -eq 0 ]]; then
echo "0"
elif [[ $cr -gt 0 ]]; then
echo "1"
else
echo "-1"
fi
}
##
# Return the day after input date.
# Usage: toTomorrow
##
function toTomorrow() {
local curDate="$1"
##debug $curDate
##TODO: Must be adapted to DATE_FMT...
##curDate="${curDate:0:4}-${curDate:4:2}-${curDate:6:2}"
##debug "date -d '$curDate +1 day ' +$DATE_FMT"
##echo `date -d "$curDate +1 day " +$DATE_FMT`
##echo `date +$DATE_FMT -d "1 day $curDate"`
echo `date -d "1 day $curDate" +$DATE_FMT`
}
function countStrsByBlank() {
##local str="$1"
##local sep="${2:-' '}"
##echo $str | awk -v v="$sep" '{ split($0, a, v);for(i in a) {c=i;}} END {print c;}'
set j=0
for item in $dates
do
let j=j+1
done
echo $j
}
##
# Get the diff date list between input two dates.
# Usage: getDiffDateList
##
function getDiffDateList() {
local endd=$1
local stad=$2
dl=()
while [[ "$stad" != "$endd" ]]
do
dl=(${dl[*]} "$stad")
stad=$(toTomorrow $stad)
done
dl=(${dl[*]} "$stad")
echo "${dl[*]}"
}
###### Check inputs ################
#1. Only two arguments.
warn ""
if [ $# != 2 ]; then
warn "ERROR: Only support two arguments input." | showUsage
exit 1;
fi
#2. Check if they're the leagal value.
tmpSd=$(checkDateValid $startDate)
if [ "$tmpSd" == "0" ]; then ###It's the invalid date. eg: 20141901
warn "ERROR: Invalid 'start date' with input '$startDate', it must be with format 'yyyyMMdd', eg: 20140101" | showUsage
exit 1;
fi
tmpEd=$(checkDateValid $endDate)
if [ "$tmpEd" == "0" ]; then ###It's the invalid date. eg: 20141901
warn "ERROR: Invalid 'end date' with input '$startDate', it must be with format 'yyyyMMdd', eg: 20140101"
exit 1;
fi
#3. Check the arg2 greater than or equal arg1.
##echo "Compare result: "$(compareDates $endDate $startDate)
cprs=$(compareDates $endDate $startDate)
if [ "$cprs" == "-1" ]; then
warn "ERROR: The first argument must not greater than the second one!" | showUsage
exit 1;
fi
######################################
##loop the dates between start and end date.
while [[ "$startDate" != "$endDate" ]]
do
echo $startDate
startDate=$(toTomorrow $startDate)
done
linux shell 日期比较大小,在Shell中使用日期运算和比较详解相关推荐
- Linux中sort,uniq,cut,wc命令详解
Linux中sort,uniq,cut,wc命令详解 来源:hellodev 本文主要对Linux中sort,uniq,cut,wc这4个命令的使用方法进行了详细说明,希望对你有所帮助. sort s ...
- linux管道命令详解,Linux系统中的管道命令的用法详解
Linux系统中管道命令是linux系统的一个强大之处.下面由学习啦小编为大家整理了Linux系统中的管道命令的用法详解的相关知识,希望对大家有帮助! Linux系统中的管道命令的用法详解 管道命令操 ...
- linux文件目录:Linux中各目录(文件夹)作用详解(持续更新)
进入Linux系统,我们就是畅游在各种目录文件中,毕竟Linux是"文件系统",文件的存放就是在目录下面,那我们了解下"Linux中各目录(文件夹)作用详解"还 ...
- Linux中ls -l命令展示信息详解
Linux中ls -l命令展示信息详解 在Linux系统中,ls -l命令是用以列表的形式来查看当前目录下的文件或目录,下面就让我们一起来看看展示的信息是什么意思吧 以CentsOS7为例子 [roo ...
- Linux中history历史命令使用方法详解
在/etc/profile里添加如下:#History export HISTTIMEFORMAT="[%F %T]" HISTDIR=/home/common/.hist if ...
- Linux 中使用 sort 指令分组排序详解
Linux 中使用 sort 指令分组排序详解 sort 中进行分组排序主要用到的选项为 -k,此文,我们着重于该选项的使用方式,用到的其它选项不做解释,有兴趣的同学可以查看帮助文档 1. 数据准备 ...
- linux ipset 流量,linux中ipset命令的使用方法详解
linux中ipset命令的使用方法详解 发布时间:2020-10-25 17:07:19 来源:脚本之家 阅读:97 作者:lijiaocn 栏目:服务器 ipset介绍 iptables是在lin ...
- php读音量大小,Android_Android中实时获取音量分贝值详解,基础知识
度量声音强度,大 - phpStudy...
Android中实时获取音量分贝值详解 基础知识 度量声音强度,大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位,计算公式如下: 分子是测量值的声压,分母是参考值的声压 ...
- 【Linux】Linux中rz和sz命令用法详解
[Linux]Linux中rz和sz命令用法详解 1. 简单介绍 rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具.优点就是不用再开一个sftp工具登录上去上传下载 ...
- python怎么横着输出_对python3中, print横向输出的方法详解
对python3中, print横向输出的方法详解 Python 2 : print打印的时候,如果结尾有逗号,打出来时候不会换行.但是在python3里面就不行了. Python3: 3.0的pri ...
最新文章
- 博士在读却连矩阵的秩都搞不清,我该如何毕业?
- oracle 12c undo,Oracle 12C新特性-临时UNDO段(Temporary Undo Segments) | 信春哥,系统稳,闭眼上线不回滚!...
- oracle select之后自动保存excel_Excel制作自动化仓库入库单,数据录入、计算、保存只需一键完成...
- Lipo移除ORC架构
- SAP License:SAP项目上线的时间选择
- 甲醛|甲醛介绍|甲醛如何清理
- Rhino学习教程——1.1
- jQuery 操作表单
- Google Chrome谷歌旧版本下载
- 解决超星网课问题之不能查询后台观看数据和不能观看超时被锁的课程
- 软件测试有效性指标,软件测试用例评审有效性的44个衡量标准[1]
- 在无外网虚拟机CentOS7下安装金山wps-office最新版(超详细小白教程)
- 数据库的三才阵——人
- (1)语言是什么——NLP的语言基础
- 关于OLED花屏的解决方案之一
- bzoj1677:求和
- Unity的gamma矫正、颜色空间及其转换的问题
- SQL SERVER 连乘写法
- 【Py】基于Python的身份证读卡器二开全记录
- c语言记录键盘敲击次数,【转】你知道一天敲键盘的敲击次数能达到多少么