Bash – Utiliser une regex pour vérifier une date

Dernièrement, pour le besoin d’un script, il me fallait créer une regex pour check que les dates étaient valide.

Voici la regex que j’ai utilisé

REGEX_DATE="^[0-9]{4}-(0[0-9]|1[0-2])-([0-2][0-9]|3[0-1])$"

Il suffit ensuite de le mettre dans un while et d’ajouter un read pour avoir une boucle qui pose et repose la question tant que la date entrée dans le terminal n’est pas valide.

J’utilise dans ce cas la le format de date anglais YYYY-MM-DD

#!/bin/bash
#
# Code by Thomas Bourcey
# 
# Check date with regex. The date should be YYYY-MM-DD
# Use "while" for do not break loop until input is a valid date
#

REGEX_DATE="^[0-9]{4}-(0[0-9]|1[0-2])-([0-2][0-9]|3[0-1])$"
while true; do
    read -p "Enter the date of account deactivation. Format [YYYY-MM-DD] : " DATE
    if [[ $DATE =~ $REGEX_DATE ]]; then
        echo "Good date format !"
        break
    else
        echo "Bad date format, try again !"
    fi
done

echo "Next Step >>"