Primeiro, divida-o em campos, pois você precisará reorganizá-los. YYMMDD ou YYYYMMDD é muito melhor para este tipo de operação de comparação, uma vez que pode olhar para toda a cadeia de uma só vez.
IFS="/" date1a=($date1) date2a=($date2)
Então, se você precisa lidar com anos antes de 1999, conserte os anos de dois dígitos com quatro dígitos, caso contrário, 99 será maior que 01.
((date1a[2] += (date1a[2] < 70 ? 2000 : 1900)))
((date2a[2] += (date2a[2] < 70 ? 2000 : 1900)))
Em seguida, junte-os novamente na ordem YYYYMMDD:
date1b="${date1a[2]}${date1a[1]}${date1a[0]}"
date2b="${date2a[2]}${date2a[1]}${date2a[0]}"
E agora você pode compará-los:
if (( $date1b < $date2b )); then
echo "earlier"
else
echo "later"
fi
Nota: Esta é uma resposta específica do bash, dependendo das características específicas do bash (e ksh) não especificadas no POSIX, e assim pode não funcionar com /bin/sh
ou o shell padrão em alguns sistemas.
POSIX requer uma abordagem diferente; você pode confiar em awk
para fazer um pouco do trabalho pesado:
awkscr='BEGIN {FS="/"}; {print $3+($3<70?2000:1900) $2 $1}'
date1b=$(echo "$date1" | awk "$awkscr")
date2b=$(echo "$date2" | awk "$awkscr")
if [ "$date1b" -lt "$date2b" ]; then
echo "earlier"
else
echo "later"
fi