我们如何才能DD/MM/YYYY
在 shell 代码中以格式输入来自用户的输入,直到用户不提供这种格式的输入,才会一次又一次地打印相同的提示。
printf "Please Enter START Date(DD/MM/YYYY)\n"
read date1
如何检查日期是否以 DD/MM/YYYY 格式提供。如果没有,那么如何再次开始这个循环?
试试这个:
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
echo 部分只是可选的,您可以考虑添加。默认情况下,如果未指定变量,则 read 将输入放在 $REPLY 变量中,但如果您愿意,可以自定义一个。
read -p "Please Enter START Date (DD/MM/YYYY): " INPUT && [[ $INPUT == ...
要获得更多 sh 兼容并根据您自己的格式,您可以拥有以下内容:
#!/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
此解决方案首先检查输入的所有标记的语法,然后使用命令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