我们怎样才能在shell代码中以DD/MM/YYYY
格式向用户提供输入,这样在用户不提供此格式的输入之前,会反复打印相同的提示。
printf "Please Enter START Date(DD/MM/YYYY)\n"
read date1
如何检查日期是否以DD / MM / YYYY格式提供。如果没有,那么如何再次启动此循环?
答案 0 :(得分:1)
试试这个:
until read -p "Please Enter START Date (DD/MM/YYYY): " && [[ $REPLY == [0-9][0-9]/[0-9][0-9]/[0-9][0-9] ]]; do
## echo "Please enter in proper (DD/MM/YYYY) format."
continue
done
回声部分只是可选的,您可以考虑添加。 默认情况下,如果没有指定变量,则读取$ REPLY变量中的输入位置,但如果您愿意,可以使用自定义变量。
read -p "Please Enter START Date (DD/MM/YYYY): " INPUT && [[ $INPUT == ...
为了更加兼容并且基于您自己的格式,您可以拥有:
#!/bin/sh
while :; do
printf "Please Enter START Date(DD/MM/YYYY)\n"
read date1
case "$date1" in
[0-9][0-9]/[0-9][0-9]/[0-9][0-9])
break
;;
esac
done
答案 1 :(得分:1)
该解决方案首先检查所有令牌的语法
输入然后使用命令date
检查是否
输入是有效日期。例如30/02/2014
正确的语法,但它不是有效的日期。请注意
date
命令接受格式MM / DD / YYYY。
#!/bin/bash
while [ 1 ]; do
IFS="/" read -p "Please Enter START Date(DD/MM/YYYY): " d m y
if [[ $d != [0-9][0-9] ]]; then echo "Day format invalid"; continue; fi
if [[ $m != [0-9][0-9] ]]; then echo "Month format invalid"; continue; fi
if [[ $y != [0-9][0-9][0-9][0-9] ]]; then echo "Year format invalid"; continue; fi
if date -d "$m/$d/$y" > /dev/null; then
date1="$d/$m/$y"
break
fi
done
# Here you can use $date1 as you prefer. For instance:
echo $date1