A maneira mais simples de apresentar os finais de semana em formato legível por humanos será:
cal -A6
Que imprimirá a próxima cal endar:
2016
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 7 1 2 3 4
3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11
10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18
17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25
24 25 26 27 28 29 30 29 30 31 26 27 28 29 30
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3
3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10
10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17
17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24
24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30
31
October
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Se você precisar de uma lista de somente aos sábados e domingos:
nextsat="$(date -d "next sat" +%Y-%m-%d)"
for i in {0..26}; do
date -d "$nextsat +$((i*7)) day" +%a-%Y-%m-%d
date -d "$nextsat +$((i*7+1)) day" +%a-%Y-%m-%d
done
O intervalo de 6 meses (meio ano) é (cerca de) ~ 182 dias, mas a menos que as condições especiais sejam de 26 semanas. Essa é a razão para {0..26} . Esta semana é a semana zero e mais 26. Se estritamente 26 semanas forem necessárias, use {0..25}.