#!/bin/bash

function det_dymax () {
  yr=$1
  mn=$2
  if [ $mn -eq 2 ]; then
    dymax=28
    if [ $((yr % 4)) -eq 0 ]; then
      dymax=29
      if [ $((yr % 100)) -eq 0 ]; then
        dymax=28
        if [ $((yr % 400)) -eq 0 ]; then
          dymax=29
        fi
      fi
    fi
  elif [ $mn -eq 4 -o $mn -eq 6 -o $mn -eq 9 -o $mn -eq 11 ]; then
    dymax=30
  else
    dymax=31
  fi
}

for yr in {2007..2018}; do
  for mn in {1..12}; do
    det_dymax $yr $mn
    for dy in {1..31}; do
      [ $dy -gt $dymax ] && continue
      # do something..
    done
  done
done