shell 编程中如何判断输入参数是否为日期格式(yyyymmdd)

legnd 2008-03-29 05:25:11
在网上找到一个类似的例子:
#!/bin/csh
(($#!=1))&&{ echo "Usage: year-month-day";exit 1; }
if echo $1|grep -q '\<[0-9]\{4\}[0-9]\{1,2\}[0-9]\{1,2\}\>';then
year=$(echo $1|cut -f1 -d'-')
month=$(echo $1|cut -f2 -d'-')
day=$(echo $1|cut -f3 -d'-')
echo $(cal $month $year)|grep -q "$day"
case $? in
0) echo $1;;
*) echo Error!;;
esac
else
echo "Enter Error!";exit 1
fi

该例子判断的是yyyy-mm-dd格式的,
但我想判断的是yyyymmdd格式(中间不要“-”),请问该如何写呢?
...全文
2392 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dawson_Wang 2009-09-08
  • 打赏
  • 举报
回复

YYYY=`expr substr $1 1 4`
MM=`expr substr $1 5 2`
DD=`expr substr $1 7 2`
i=$2

if ! expr $YYYY + $MM + $DD >/dev/null 2>&1
then
echo "[Error]: Input Date format error!\n"
fi

if [ `expr length $YYYY` -ne 4 ]
then
echo "[Error]: year error!\n"
fi

if [ $MM -lt 1 ] || [ $MM -gt 12 ]
then
echo "[Error]: month error!\n"
fi

LAST_DD=`echo \`cal $MM $YYYY\`|tail -n1|awk '{print $NF}'`
if [ $DD -lt 1 ] || [ $DD -gt $LAST_DD ]
then
echo "[Error]: day error!\n"
fi
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
有点难度哦
kingstarer 2008-04-30
  • 打赏
  • 举报
回复
用正则表达式啊 以前写过perl的 shell应该也有
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
接分先!
spark603 2008-03-31
  • 打赏
  • 举报
回复
没有规则,怎么写?
legnd 2008-03-29
  • 打赏
  • 举报
回复
谁知道的指导一下!

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧