Se não estou enganado, sua expressão (reorganizada aqui um pouco) localiza o número da semana correspondente ao primeiro dia do mês atual, o número da semana correspondente a hoje e calcula a diferença como semana do mês ?
first=$(date -d "-$(($(date +%d)-1)) days")
weekofmon=$(( 1 + $(date +%V) - $(date -d "$first" +%V) ))
Se isso é certo, e você quer a semana do mês da semana passada, não deveria ser suficiente apenas substituir "hoje" por "7 dias atrás" (em todos os lugares) para obter o mês-de- semana correspondente a essa data?
now="7 days ago"
first=$(date -d "$now - $(($(date +%d -d "$now" )-1)) days")
weekofmon=$(( 1 + 10#$(date +%V -d "$now") - 10#$(date -d "$first" +%V) ))
Depende de date
poder analisar expressões como "7 days ago - 3 days". date +%V
imprime números da semana < 10 com um zero à esquerda, o que faria com que eles fossem interpretados como números octal, quebrando 08
e 09
. Adicione o 10#
para forçar o bash a obter os números em decimal.
Uma maneira um pouco mais curta de obter o primeiro dia do mesmo mês:
first=$(date -d "$now" +"%Y-%m-01")
(formato diferente, mas date
deve ser capaz de interpretá-lo.)