二桁表示
要するに前回のは %M が一桁だった場合において 0 を頭につけることで二桁にしただけです。時、分、秒 なんて一桁だったり二桁だったりでうっとおしいので、いっその事二桁で統一した方が見やすいでしょ。最初から二桁である場合は何もさせません。てことで続けていきましょう。
case $h in [0-9]) h=0$h ;; [01][0-9]|2[0-3]) ;; ,*) set `date + '%H'`; h=$1 ;; esac case $d in [1-9]) d=0$d ;; 0[1-9]|[12][0-9]|3[01]) ;; ,|*) set `date + '%d'`; d=$1 ;; esac case $m in [Jj]an*) m=01 ;; [Ff]eb*) m=02 ;; [Mm]ar*) m=03 ;; [Aa]pr*) m=04 ;; [Mm]ay*) m=05 ;; [Jj]un*) m=06 ;; [Jj]ul*) m=07 ;; [Aa]ug*) m=08 ;; [Ss]ep*) m=09 ;; [Oo]ct*) m=10 ;; [Nn]ov*) m=11 ;; [Dd]ec*) m=12 ;; [1-9]) m=0$m; 0[1-9]|1[0-2] ;; ,*) set `date + '%m'`; m=$1 ;; esac case $y in 20[0-4][0-9]) ;; 2050) echo 'warning; rexamination is required' ;; 205[1-9]) ;; 20[6-9][0-9]) ;; ,|*) set `date + '%Y'` y=$1 ;;