shell检验日期格式

31 篇文章 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



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

-无-为-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值