Saltar al contenido

Validar el formato de fecha en un script de shell

Esta división fue evaluado por especialistas así aseguramos la exactitud de nuestra esta reseña.

Solución:

Fecha de uso

date "+%d/%m/%Y" -d "09/99/2013" > /dev/null  2>&1
 is_valid=$?

Si no obtiene 0, la fecha tiene un formato no válido.

La solución más simple, que todavía funciona perfectamente, es la siguiente:

if [[ $1 =~ ^[0-9]4-[0-9]2-[0-9]2$ ]] && date -d "$1" >/dev/null 2>&1
   ...

Consiste en combinar 2 cheques:

  • la primera parte comprueba que $1 es de este formato: NNNN-NN-NN
  • la segunda parte comprueba que es una fecha válida

Necesitas los dos cheques porque:

  • si no haces la primera comprobación, date saldrá con el código 0 incluso si su variable es una fecha válida en otro formato
  • si no hace la segunda verificación, puede terminar con un 0 incluso para variables como 2016-13-45

Esta función espera 2 cadenas, un formato stringuna cita string

El formato string usa los códigos del comando de fecha pero no incluye el ‘+’

La función devuelve 0 si la fecha proporcionada coincide con el formato dado; de lo contrario, devuelve 1

Código (mi_script.sh)

#!/bin/bash

datecheck() 
    local format="$1" d="$2"
    [[ "$(date "+$format" -d "$d" 2>/dev/null)" == "$d" ]]


date_test="$1"

echo $date_test
if datecheck "%d %b %Y" "$date_test"; then
    echo OK
else
    echo KO
fi

Producción

$ ./my_script.sh "05 Apr 2020"
05 Apr 2020
OK
$ ./my_script.sh "foo bar"
foo bar
KO

Aquí tienes las comentarios y calificaciones

Si te gustó nuestro trabajo, puedes dejar un tutorial acerca de qué te ha impresionado de este post.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *