Я новичок в Bash, поэтому, пожалуйста, помогите мне лучше сформулировать этот вопрос, если нужно.
Допустим, у меня есть сценарий .sh
. Этот скрипт выполняет некоторые расчеты для некоторых данных за каждый день предыдущей недели с воскресенья по субботу (неделя начинается с воскресенья). Например, сегодня я запускаю этот сценарий для данных, начиная с 23 февраля 2020 года по 29 февраля 2020 года. При запуске сценария на моем терминале я предоставляю 3 параметра - год, месяц и день
./scriptname.sh ${yyyy} ${mm} ${dd}
Сейчас большинство времени у меня все хорошо с чем-то вроде этого
yyyy=2020; mm=02; for dd in seq 23 -w 29; do ./scriptname.sh ${yyyy} ${mm} ${dd}; done
Но почти каждый месяц есть неделя, которая распространяется на следующий месяц (например, неделя с 29 марта по 4 апреля). Сначала я подумал, что смогу немного автоматизировать это, используя переменные
start_day=$(date -d "last-sunday -7 days" +%d);
end_day=$(date -d "last-saturday" +%d);
start_month=$(date -d "last-sunday -7 days" +%m);
end_month=$(date -d "last-saturday" +%m);
Так что приведенный выше скрипт изменится на что-то вроде этого (пришлось исключить обратную галочку вокруг seq для форматирования ради)
yyyy=2020; for mm in ${start_month} ${end_month}; do for dd in seq -w ${start_day} ${end_day}; do ./scriptname.sh ${yyyy} ${mm} ${dd}; done; done
Но это создает все перестановки dd
и mm
. Как мне убедиться, что я передаю только эти 7 соответствующих значений для ${yyyy} ${mm} ${dd}
?
2020 03 29
2020 03 30
2020 03 31
2020 04 01
2020 04 02
2020 04 03
2020 04 04