【发布时间】:2016-08-25 04:45:30
【问题描述】:
如果用户输入的日期格式不是 (YYYY-MM-DD),我会尝试修复用户输入,但我无法弄清楚。这是我所拥有的:
while [ "$startDate" != "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" ]
do
echo "Please retype the start date (YYYY-MM-DD):"
read startDate
done
【问题讨论】:
如果用户输入的日期格式不是 (YYYY-MM-DD),我会尝试修复用户输入,但我无法弄清楚。这是我所拥有的:
while [ "$startDate" != "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" ]
do
echo "Please retype the start date (YYYY-MM-DD):"
read startDate
done
【问题讨论】:
您必须使用! $var =~ regex 而不是!= 来执行regex comparisons:
[[ $date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]
^^
这样你的脚本可以是这样的:
date=""
while [[ ! $date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; do
echo "enter date (YYYY-MM-DD)"
read $date
done
【讨论】:
为什么不使用日期程序将不正确的格式转换为所需的格式:
$ date -d "06/38/1992" +"%Y-%m-%d"
1992-06-28
您也可以通过检查返回值来检查转换失败。
$ date -d "06/38/1992" +"%Y-%m-%d"
date: invalid date ‘06/38/1992’
$ [ -z $? ] || echo "Error, failed to parse date"
【讨论】: