Estoy escribiendo un script de shell y no sé por qué mi código de validación de fecha no funciona. Probé las siguientes soluciones a preguntas similares que encontré, pero is_valid siempre se establece en 1:
date "+%m/%d/%Y" -d "$1" 2>1 > /dev/null //or.. date -d "2012-02-29" > /dev/null 2>&1 is_valid=$? #always set to 1, even when given a valid date¿Cómo valido correctamente el formato de fecha? La fecha solo debe ser válida si tiene el formato MM/DD/YYYY
También probé esta solución: Linux Bash - Formato de fecha pero siempre rechazó la fecha también.
La date BSD que se incluye con Mac OS X no admite la opción -d (o más bien, usa -d para algo completamente diferente). Instale la date de GNU o use lo siguiente para validar su cadena de entrada:
date -f "%Y-%m-%d" -j "2012-02-29" >/dev/null 2>&1 El -f proporciona el formato de entrada, y el -j le dice a la date que simplemente envíe la fecha, no intente configurar el reloj del sistema.
Se me ocurrió esta pequeña función:
function isDateInvalid() { date -d "$1" "+%m/%d/%Y" > /dev/null 2>&1 res=$? echo "$res" } isDateInvalid "2012-02-219" 1 isDateInvalid "2012-02-29" 0for y in {2013..2014}; do for m in {01..12}; do for d in {01..31}; do [[ ! "`date -jf %Y%m%d $y$m$d +%Y%m%d`" = "$y$m$d" ]] && continue echo $y.$m.$d done done donesi las cadenas coinciden, el bucle continuará...