GNU/Linux >> Tutoriales Linux >  >> Linux

comprobar si el argumento es una fecha válida en bash shell

Puede extraer los valores de día, mes y año del valor de fecha de entrada MM-DD-AAAA y validarlo como el formato inequívoco (ISO) AAAA-MM-DD en su lugar (puede validar una fecha con formato DD-MM-AAAA como "correcto" usando la fecha, por ejemplo, 25-12-2010, pero no es una fecha MM-DD-AAAA válida, por lo tanto, primero es necesario cambiar el formato de fecha)

Una fecha válida en el formato correcto está bien

30 de noviembre de 2005 es válido:

$ DATE=11-30-2005; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=2005, month=11, day=30  
VALID

$ DATE=11-30-2005; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
VALID

Una fecha inválida en el formato correcto NO ESTÁ BIEN

31 de noviembre de 2005 no valida:

$ DATE=11-31-2005; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=2005, month=11, day=31  
INVALID

$ DATE=11-31-2005; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
INVALID

Una fecha válida en el formato incorrecto NO ESTÁ BIEN

20 de abril de 1979 en formato DD-MM-AAAA no valida como fecha MM-DD-AAAA:

$ DATE=20-04-1979; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=1979, month=20, day=04  
INVALID

$ DATE=20-04-1979; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
INVALID

Método alternativo más simple:use la cadena variable BASH, reemplace los guiones por barras

$ DATE="04-30-2005"; [[ $(date -d "${DATE//-/\/}" 2> /dev/null) ]] && echo VALID || echo INVALID
VALID

$ DATE="04-31-2005"; [[ $(date -d "${DATE//-/\/}" 2> /dev/null) ]] && echo VALID || echo INVALID
INVALID

Puedes consultar con date -d "datestring"

Así que date -d "12/31/2012" es válido, pero usando guiones, p. date -d "12-31-2012" , no es válido para date .

También puedes usar palabras:date -d 'yesterday' o date -d '1 week ago' ambos son válidos.


Linux
  1. Personalización del shell Bash

  2. ¿Cómo verificar la fecha de instalación de su sistema operativo Linux?

  3. ¿Funciones en variables de Shell?

  4. Cómo hacer eco de una nueva línea en Bash Shell Scripts

  5. Verifique la conectividad de la base de datos usando el script Shell

Cómo verificar la zona horaria en Linux

.bashrc frente a .bash_profile

Cómo verificar si existe un archivo o directorio en Bash Shell

Comparación de fechas en Bash

Compruebe si alguno de los parámetros de un script bash coincide con una cadena

¿Cuál es la mejor manera de verificar si un volumen está montado en un script Bash?