¿Cómo haría para realizar la validación de la fecha en la entrada del usuario en un script de shell? Quiero notificar al usuario si ingresa la fecha en el formato incorrecto. El formato correcto sería AAAAMMDD.
Respuesta1
Este método trata la entrada como una cadena, luego la analiza y prueba para determinar si tiene el formato adecuado. En este formulario, también comprobo si los campos de la fecha son correctos, pero puedes eliminar esos condicionales si no los necesitas.
#!/bin/bash
echo -n "Enter the date as YYYYMMDD >"
read date
if [ ${#date} -eq 8 ]; then
year=${date:0:4}
month=${date:4:2}
day=${date:6:2}
month30="04 06 09 11"
leapyear=$((year%4)) # if leapyear this is 0
if [ "$year" -ge 1901 -a "$month" -le 12 -a "$day" -le 31 ]; then
if [ "$month" -eq 02 -a "$day" -gt 29 ] || [ "$leapyear" -ne 0 -a "$month" -eq 02 -a "$day" -gt 28 ]; then
echo "Too many days for February... try again"; exit
fi
if [[ "$month30" =~ "$month" ]] && [ "$day" -eq 31 ]; then
echo "Month $month cannot have 31 days... try again"; exit
fi
else echo "Date is out of range"; exit
fi
else echo "try again...expecting format as YYYYMMDD"; exit
fi
echo "SUCCESS!"
echo "year: $year month: $month day: $day"
Respuesta2
Es posible que le guste la opción de aceptar muchos formatos y convertirlos al formato estándar; el date
comando puede ayudar:
$ day=$(unset day;
until date -d "${day:-XXX}" '+%Y%m%d' 2>/dev/null
do read -p "Which day? " day
done)
Which day?
Which day? weds
Which day? friday
$ echo $day
20150508