GNU/Linux >> Tutoriels Linux >  >> Linux

vérifier si l'argument est une date valide dans le shell bash

Vous pouvez extraire les valeurs de jour, de mois et d'année de la valeur de date d'entrée MM-DD-YYYY et la valider au format sans ambiguïté (ISO) AAAA-MM-JJ à la place (vous pouvez valider une date au format JJ-MM-AAAA comme "correct" en utilisant la date, par exemple 25-12-2010, mais ce n'est pas une date MM-DD-YYY valide, d'où la nécessité de changer le format de la date en premier)

Une date valide au format correct est OK

Le 30 novembre 2005 est valide :

$ 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

Une date invalide au format correct n'est PAS OK

Le 31 novembre 2005 ne valide pas :

$ 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

Une date valide au format incorrect n'est PAS OK

Le 20 avril 1979 au format JJ-MM-AAAA n'est pas validé comme une date MM-JJ-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éthode alternative plus simple :utilisez la chaîne variable BASH pour remplacer les tirets par des barres obliques

$ 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

Vous pouvez vérifier avec date -d "datestring"

Alors date -d "12/31/2012" est valide, mais en utilisant des traits d'union, par ex. date -d "12-31-2012" , n'est pas valide pour date .

Vous pouvez également utiliser des mots :date -d 'yesterday' ou date -d '1 week ago' sont tous deux valides.


Linux
  1. Comment vérifier la date d'installation de votre système d'exploitation Linux ?

  2. Fonctions dans les variables shell ?

  3. Bash :Echo :Erreur d'écriture :Argument invalide ?

  4. Paramètres spéciaux de Bash expliqués avec 4 exemples de scripts Shell

  5. Paramètres positionnels de Bash expliqués avec 2 exemples de scripts Shell

.bashrc contre .bash_profile

Comment vérifier si un fichier ou un répertoire existe dans Bash Shell

Bash Shell Script - Recherchez un indicateur et saisissez sa valeur

Comparaison de dates dans Bash

Quelle est la meilleure façon de vérifier si un volume est monté dans un script Bash ?

Shell =Vérifier si la variable commence par #