所以我试图在 bash 中编写一个简单的脚本,要求用户输入以下格式(YYYY-dd-mm)的日期。不幸的是,我卡在了第一步,即验证输入的格式是否正确。我尝试使用“日期”但没有运气(因为它返回实际的当前日期)。我试图让这个尽可能简单。谢谢您的帮助!
问问题
14499 次
2 回答
30
使用正则表达式:
if [[ $date =~ ^[0-9]{4}-[0-3][0-9]-[0-1][0-9]$ ]]; then
或使用 bash glob:
if [[ $date == [0-9][0-9][0-9][0-9]-[0-3][0-9]-[0-1][0-9] ]]; then
请注意,此正则表达式将接受一个9999-00-19
不正确的日期。因此,在您使用此正则表达式检查其可能的正确性之后,您应该验证数字是否正确。
IFS='-' read -r year day month <<< "$date"
这会将数字放入$year
$day
和$month
变量中。
于 2013-09-11T18:46:34.803 回答
3
date -d "$date" +%Y-%m-%d
后者是格式,-d 允许输入日期。如果它是错误的,它将返回一个可以通过管道传送到位桶的错误,如果它是正确的,它将返回日期。
格式修饰符可以在 date 的手册页中找到man 1 date
。这是一个包含 3 个日期的数组的示例:
dates=(2012-01-34 2014-01-01 2015-12-24)
for Date in ${dates[@]} ; do
if [ -z "$(date -d $Date 2>/dev/null)" ; then
echo "Date $Date is invalid"
else
echo "Date $Date is valid"
fi
done
请注意:man date
在工作时输入 Google 会产生一些 NSFW 结果;)
于 2016-11-21T10:49:03.083 回答