shell检验日期格式

17 篇文章 0 订阅

     我不是码农,我是数据搬运工。年前最后一天上班,在搬数据。从北京IDC机房传数据到杭州IDC机房做分析处理,看了一下之前自己写的shell脚本,发现日期没有校验,感觉有点不爽,然后写了个校验。

     废话不多说:

1.校验YYYYMMDD格式的日期,只允许8位长度。

2.校验YYYY-MM-DD格式的日期,长度随意。

稍加修改,就可以去校验“YYYY-MM-DD HH24:mi:ss”了

#cat   date_test.sh
tt=`date -d "2010-10-111" +"%Y-%m-%d"`
echo $?

tt=`date -d "2010-10-1" +"%Y-%m-%d"`
echo $?

function check_date(){
dt="$1"
len_dt=${#dt}
dt=${dt//-/}
len_dt2=${#dt}
p=`echo $(($len_dt-$len_dt2))`

if [ 2 -eq $p  ]
then
  
    tt=`date -d "$1" +"%Y-%m-%d"`
    echo $?
else
    if [ 8 -eq $len_dt2  ]
    then
         tt=`date -d "$1" +"%Y-%m-%d"`
         echo $?
    else
         echo 1
    fi
fi

}

dt="20110101"
echo -e "\ncheck_date $dt"
check_date "$dt"

dt="201101011"
echo -e "\ncheck_date $dt"
check_date "$dt"

dt="2011-01-01"
echo -e "\ncheck_date $dt"
check_date "$dt"

dt="2011-1-1"
echo -e "\ncheck_date $dt"
check_date "$dt"

dt="2011-01-1"
echo -e "\ncheck_date $dt"
check_date "$dt"

dt="2011-01-01"
echo -e "\ncheck_date $dt"
check_date "$dt"

dt="2011-01-32"
echo -e "\ncheck_date $dt"
check_date "$dt"


dt="20110229"
echo -e "\ncheck_date $dt"
check_date "$dt"

dt="20110228"
echo -e "\ncheck_date $dt"
check_date "$dt"

dt="200002229"
echo -e "\ncheck_date $dt"
check_date "$dt"


dt="1-1-1"
echo -e "\ncheck_date $dt"
check_date "$dt"

dt="22221-1-1"
echo -e "\ncheck_date $dt"
check_date "$dt"

运行结果

#sh   date_test.sh
date: invalid date `2010-10-111'
1
0

check_date 20110101
0

check_date 201101011
1

check_date 2011-01-01
0

check_date 2011-1-1
0

check_date 2011-01-1
0

check_date 2011-01-01
0

check_date 2011-01-32
date: invalid date `2011-01-32'
1

check_date 20110229
date: invalid date `20110229'
1

check_date 20110228
0

check_date 200002229
1

check_date 1-1-1
0

check_date 22221-1-1
0

详细的运行过程

#sh  -x  date_test.sh
++ date -d 2010-10-111 +%Y-%m-%d
date: invalid date `2010-10-111'
+ tt=
+ echo 1
1
++ date -d 2010-10-1 +%Y-%m-%d
+ tt=2010-10-01
+ echo 0
0
+ dt=20110101
+ echo -e '\ncheck_date 20110101'

check_date 20110101
+ check_date 20110101
+ dt=20110101
+ len_dt=8
+ dt=20110101
+ len_dt2=8
++ echo 0
+ p=0
+ '[' 2 -eq 0 ']'
+ '[' 8 -eq 8 ']'
++ date -d 20110101 +%Y-%m-%d
+ tt=2011-01-01
+ echo 0
0
+ dt=201101011
+ echo -e '\ncheck_date 201101011'

check_date 201101011
+ check_date 201101011
+ dt=201101011
+ len_dt=9
+ dt=201101011
+ len_dt2=9
++ echo 0
+ p=0
+ '[' 2 -eq 0 ']'
+ '[' 8 -eq 9 ']'
+ echo 1
1
+ dt=2011-01-01
+ echo -e '\ncheck_date 2011-01-01'

check_date 2011-01-01
+ check_date 2011-01-01
+ dt=2011-01-01
+ len_dt=10
+ dt=20110101
+ len_dt2=8
++ echo 2
+ p=2
+ '[' 2 -eq 2 ']'
++ date -d 2011-01-01 +%Y-%m-%d
+ tt=2011-01-01
+ echo 0
0
+ dt=2011-1-1
+ echo -e '\ncheck_date 2011-1-1'

check_date 2011-1-1
+ check_date 2011-1-1
+ dt=2011-1-1
+ len_dt=8
+ dt=201111
+ len_dt2=6
++ echo 2
+ p=2
+ '[' 2 -eq 2 ']'
++ date -d 2011-1-1 +%Y-%m-%d
+ tt=2011-01-01
+ echo 0
0
+ dt=2011-01-1
+ echo -e '\ncheck_date 2011-01-1'

check_date 2011-01-1
+ check_date 2011-01-1
+ dt=2011-01-1
+ len_dt=9
+ dt=2011011
+ len_dt2=7
++ echo 2
+ p=2
+ '[' 2 -eq 2 ']'
++ date -d 2011-01-1 +%Y-%m-%d
+ tt=2011-01-01
+ echo 0
0
+ dt=2011-01-01
+ echo -e '\ncheck_date 2011-01-01'

check_date 2011-01-01
+ check_date 2011-01-01
+ dt=2011-01-01
+ len_dt=10
+ dt=20110101
+ len_dt2=8
++ echo 2
+ p=2
+ '[' 2 -eq 2 ']'
++ date -d 2011-01-01 +%Y-%m-%d
+ tt=2011-01-01
+ echo 0
0
+ dt=2011-01-32
+ echo -e '\ncheck_date 2011-01-32'

check_date 2011-01-32
+ check_date 2011-01-32
+ dt=2011-01-32
+ len_dt=10
+ dt=20110132
+ len_dt2=8
++ echo 2
+ p=2
+ '[' 2 -eq 2 ']'
++ date -d 2011-01-32 +%Y-%m-%d
date: invalid date `2011-01-32'
+ tt=
+ echo 1
1
+ dt=20110229
+ echo -e '\ncheck_date 20110229'

check_date 20110229
+ check_date 20110229
+ dt=20110229
+ len_dt=8
+ dt=20110229
+ len_dt2=8
++ echo 0
+ p=0
+ '[' 2 -eq 0 ']'
+ '[' 8 -eq 8 ']'
++ date -d 20110229 +%Y-%m-%d
date: invalid date `20110229'
+ tt=
+ echo 1
1
+ dt=20110228
+ echo -e '\ncheck_date 20110228'

check_date 20110228
+ check_date 20110228
+ dt=20110228
+ len_dt=8
+ dt=20110228
+ len_dt2=8
++ echo 0
+ p=0
+ '[' 2 -eq 0 ']'
+ '[' 8 -eq 8 ']'
++ date -d 20110228 +%Y-%m-%d
+ tt=2011-02-28
+ echo 0
0
+ dt=200002229
+ echo -e '\ncheck_date 200002229'

check_date 200002229
+ check_date 200002229
+ dt=200002229
+ len_dt=9
+ dt=200002229
+ len_dt2=9
++ echo 0
+ p=0
+ '[' 2 -eq 0 ']'
+ '[' 8 -eq 9 ']'
+ echo 1
1
+ dt=1-1-1
+ echo -e '\ncheck_date 1-1-1'

check_date 1-1-1
+ check_date 1-1-1
+ dt=1-1-1
+ len_dt=5
+ dt=111
+ len_dt2=3
++ echo 2
+ p=2
+ '[' 2 -eq 2 ']'
++ date -d 1-1-1 +%Y-%m-%d
+ tt=0001-01-01
+ echo 0
0
+ dt=22221-1-1
+ echo -e '\ncheck_date 22221-1-1'

check_date 22221-1-1
+ check_date 22221-1-1
+ dt=22221-1-1
+ len_dt=9
+ dt=2222111
+ len_dt2=7
++ echo 2
+ p=2
+ '[' 2 -eq 2 ']'
++ date -d 22221-1-1 +%Y-%m-%d
+ tt=22221-01-01
+ echo 0
0



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
时差检测脚本(shell script)是一种用于检测多个计算机之间时差的脚本程序。在计算机网络环境中,由于各个计算机的时钟存在微小的差异,导致在进行时间同步等操作时可能出现问题。因此,通过编写一个时差检测脚本可以方便地检测和计算各个计算机之间的时差,以保证时间同步的准确性和可靠性。 时差检测脚本的原理是通过向多个计算机发送时间同步请求,并获取各个计算机的系统时间。然后,通过对比各个计算机的系统时间,计算并比较它们之间的时差。通常,可以使用计算机内置的命令如date获取系统时间,并进行时间计算和比较。在脚本中,可以使用循环结构和条件判断等控制流语句来实现对多个计算机的遍历和计算。 时差检测脚本的编写需要考虑以下几个要点:首先,需要定义要检测的计算机列表,包括它们的IP地址或主机名;其次,需要建立与每个计算机的网络连接,并发送时间同步请求;然后,获取各个计算机的系统时间,并进行时差的计算;最后,输出时差结果,并根据需要采取措施进行时间调整或同步。 时差检测脚本的应用场景广泛,比如在分布式系统中,通过定期执行该脚本可以检测和修正各个计算机之间的时差,避免因时差导致的数据不一致等问题。此外,在日志分析、系统监控等场景中,时差检测脚本也可以用来判断计算机是否处于正确的时间状态,以便进行相应的处理和分析。 总之,时差检测脚本是一种非常实用的工具,可以帮助我们准确地检测和计算多个计算机之间的时差,保证时间同步的精确性和可靠性。同时,通过对时差的检测和调整,还可以提高分布式系统和网络环境下各种应用的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-无-为-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值