Sprawdzenie/walidacja formatu wprowadzonej daty w skryptach powłoki – sh w systemach Linux/Unix

W skryptach powłoki czasami istnieje konieczność walidacji formatu wprowadzonej daty.
Niektóre programy wymagają podania jej w formacie DD-MM-YYYY, inne YYYY-MM-DD, a jeszcze inne DD.MM.YYYY.

Sprawdzenia formatu daty możemy dokonać przy wykorzystaniu funkcji warunkowej if oraz zdefiniowanego wzorca.
Spójrzmy na przykład. Poniższy kod zapiszemy w pliku: skrypt.sh

if [[ "$1" =~ ^[0-9]{2}-[0-9]{2}-[0-9]{4}$ ]]; then
 echo "Wprowadziłeś poprawną datę: DD-MM-YYYY: $1"
else
 echo "Błędny format daty. Prawidłowy format to: DD-MM-YYYY."
 exit
fi

W przypadku kiedy wywołamy teraz: skrypt.sh 11-02-2021 otrzymamy komunikat:
Wprowadziłeś poprawną datę: 11-02-2021

Jeżeli natomiast wywołamy skrypt: skrypt.sh 2021-02-11 otrzymamy komunikat:
Błędny format daty. Prawidłowy format to: DD-MM-YYYY.

Poniżej przestawiam pozostałe wzorce dla poszczególnych formatów dat:

Format: YYYY-MM-DD, np: 2021-02-11

if [[ "$1" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then

Format: DD.MM.YYYY, np: 21.02.2021

if [[ "$1" =~ ^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$ ]]; then

Należy pamiętać, że powyższe wzorce nie zabepieczą nas przed błędą datą, np. 32-13-2012, a jedynie sprawdzą format jej podania.