#!/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