二桁表示

要するに前回のは %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 ;;