脚本内容大概主要包括以下: 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中使用日期运算和比较详解相关推荐

  1. Linux中sort,uniq,cut,wc命令详解

    Linux中sort,uniq,cut,wc命令详解 来源:hellodev 本文主要对Linux中sort,uniq,cut,wc这4个命令的使用方法进行了详细说明,希望对你有所帮助. sort s ...

  2. linux管道命令详解,Linux系统中的管道命令的用法详解

    Linux系统中管道命令是linux系统的一个强大之处.下面由学习啦小编为大家整理了Linux系统中的管道命令的用法详解的相关知识,希望对大家有帮助! Linux系统中的管道命令的用法详解 管道命令操 ...

  3. linux文件目录:Linux中各目录(文件夹)作用详解(持续更新)

    进入Linux系统,我们就是畅游在各种目录文件中,毕竟Linux是"文件系统",文件的存放就是在目录下面,那我们了解下"Linux中各目录(文件夹)作用详解"还 ...

  4. Linux中ls -l命令展示信息详解

    Linux中ls -l命令展示信息详解 在Linux系统中,ls -l命令是用以列表的形式来查看当前目录下的文件或目录,下面就让我们一起来看看展示的信息是什么意思吧 以CentsOS7为例子 [roo ...

  5. Linux中history历史命令使用方法详解

    在/etc/profile里添加如下:#History export HISTTIMEFORMAT="[%F %T]" HISTDIR=/home/common/.hist if ...

  6. Linux 中使用 sort 指令分组排序详解

    Linux 中使用 sort 指令分组排序详解 sort 中进行分组排序主要用到的选项为 -k,此文,我们着重于该选项的使用方式,用到的其它选项不做解释,有兴趣的同学可以查看帮助文档 1. 数据准备 ...

  7. linux ipset 流量,linux中ipset命令的使用方法详解

    linux中ipset命令的使用方法详解 发布时间:2020-10-25 17:07:19 来源:脚本之家 阅读:97 作者:lijiaocn 栏目:服务器 ipset介绍 iptables是在lin ...

  8. php读音量大小,Android_Android中实时获取音量分贝值详解,基础知识 度量声音强度,大 - phpStudy...

    Android中实时获取音量分贝值详解 基础知识 度量声音强度,大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位,计算公式如下: 分子是测量值的声压,分母是参考值的声压 ...

  9. 【Linux】Linux中rz和sz命令用法详解

    [Linux]Linux中rz和sz命令用法详解 1. 简单介绍 rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具.优点就是不用再开一个sftp工具登录上去上传下载 ...

  10. python怎么横着输出_对python3中, print横向输出的方法详解

    对python3中, print横向输出的方法详解 Python 2 : print打印的时候,如果结尾有逗号,打出来时候不会换行.但是在python3里面就不行了. Python3: 3.0的pri ...

最新文章

  1. 博士在读却连矩阵的秩都搞不清,我该如何毕业?
  2. oracle 12c undo,Oracle 12C新特性-临时UNDO段(Temporary Undo Segments) | 信春哥,系统稳,闭眼上线不回滚!...
  3. oracle select之后自动保存excel_Excel制作自动化仓库入库单,数据录入、计算、保存只需一键完成...
  4. Lipo移除ORC架构
  5. SAP License:SAP项目上线的时间选择
  6. 甲醛|甲醛介绍|甲醛如何清理
  7. Rhino学习教程——1.1
  8. jQuery 操作表单
  9. Google Chrome谷歌旧版本下载
  10. 解决超星网课问题之不能查询后台观看数据和不能观看超时被锁的课程
  11. 软件测试有效性指标,软件测试用例评审有效性的44个衡量标准[1]
  12. 在无外网虚拟机CentOS7下安装金山wps-office最新版(超详细小白教程)
  13. 数据库的三才阵——人
  14. (1)语言是什么——NLP的语言基础
  15. 关于OLED花屏的解决方案之一
  16. bzoj1677:求和
  17. Unity的gamma矫正、颜色空间及其转换的问题
  18. SQL SERVER 连乘写法
  19. 【Py】基于Python的身份证读卡器二开全记录
  20. c语言记录键盘敲击次数,【转】你知道一天敲键盘的敲击次数能达到多少么

热门文章

  1. Google Guice使用入门
  2. EBB-11、Linux启动流程
  3. 2012年5月法国旅游网站排名
  4. 好东西和大家分享阿!
  5. 文化之旅(dijstra)
  6. 【python】组合搜索
  7. 20145307《信息安全系统设计基础》期中总结
  8. -shape 填充 圆角矩形 圆形 环形
  9. ExtJs计算两个DateField所间隔的月份(天数) new Date(str) IE游览器提示NaN 处理...
  10. hdu 1081 To The Max(最大子段和的升级版,二维)