O problema é que, dependendo do dia atual, "Sunday x weeks ago" pode estar antes de "Monday x weeks ago":
- Se hoje for segunda-feira, "Domingo x semanas atrás"="segunda-feira x semanas atrás" + 6
- Se hoje não for segunda-feira, "Domingo x semanas atrás"="segunda-feira x semanas atrás" - 1
Em vez de usar "Sunday x weeks ago" e "Monday x weeks ago", será mais fácil realizar "Sunday x weeks ago" e "Sunday x weeks ago - 6 days".
Com algumas outras correções de erros e simplificações, aqui está seu script atualizado:
#!/bin/bash
for ((w=1;w<=6;w++)); do
end=$(date --date "sun $w weeks ago" +%F)
beg=$(date --date "sun $w weeks ago - 6 days" +%F)
week=$(date --date "$beg" +%G-%V)
echo "$week beg=$beg end=$end" $((($(date --date $end +%s) - $(date --date $beg +%s)) / 86400 + 1 )) "days"
done
Observe que alterei também a configuração de week
para ser baseada em beg
.
No entanto, você ainda precisa ter em mente qual domingo você quer escolher no domingo: hoje ou na semana anterior? Este roteiro vai escolher o domingo da semana anterior, nunca hoje. Se não for isso que você deseja, convém repensar os cálculos com base na segunda-feira em vez de no domingo: "Segunda-feira x semanas atrás" e "Segunda-feira x semanas atrás + 6 dias":
for ((w=1;w<=6;w++)); do
beg=$(date --date "mon $w weeks ago" +%F)
end=$(date --date "mon $w weeks ago + 6 days" +%F)
week=$(date --date "$w weeks ago" +%G-%V)
echo "$week beg=$beg end=$end" $((($(date --date $end +%s) - $(date --date $beg +%s)) / 86400 + 1 )) "days"
done