shopt -s extglob
case $var in
@(1|2|3|4|5|6|7|8|9|10|11|12)) ... ;; # de 1 à 12
@(13|14|15|16|17|18|19)) ... ;; # de 13 à 19
[2-3][0-9]) ... ;; # de 20 à 39
@(40|41|42)) ... ;; # de 40 à 42
*) ... ;;
esac
Mais ça reste un contournement, case cherche des expressions littérales. Pour faire des comparaisons numériques, l’utilisation de if reste plus appropriée.
Sauf peut-être avec d’autres shells que bash, mais j’en doute…