Using GNU date and brute force:
start=20170101 end=20170630 cur=$start increment="1 day" while [ $(date +%s -d "$cur") -le $(date +%s -d "$end") ] do if [ "$(date +%A -d "$cur")" = "Saturday" ] then printf "%s\n" "$cur" increment="1 week" fi cur=$(date +%Y%m%d -d "$cur + $increment") done start=20170101 end=20170630 cur=$start increment="1 day" while [ $(date +%s -d "$cur") -le $(date +%s -d "$end") ] do if [ "$(date +%A -d "$cur")" = "Saturday" ] then printf "%s\n" "$cur" increment="1 week" fi cur=$(date +%Y%m%d -d "$cur + $increment") done