【发布时间】:2020-03-02 20:02:36
【问题描述】:
我是 Bash 新手,所以如果需要,请帮助我更好地阐明这个问题。
假设我有一个.sh 脚本。此脚本对从星期日到星期六的前一周的每一天的某些数据执行一些计算(该周从星期日开始)。例如今天,我正在为 2020 年 2 月 23 日至 2020 年 2 月 29 日的数据运行此脚本。在我的终端上运行脚本时,我提供了 3 个参数 - 年、月和日
./scriptname.sh ${yyyy} ${mm} ${dd}
现在,大多数时候,我可以接受这样的事情
yyyy=2020; mm=02; for dd in seq 23 -w 29; do ./scriptname.sh ${yyyy} ${mm} ${dd}; done
但几乎每个月都会有一周延续到下个月(例如从 3 月 29 日到 4 月 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 的所有排列。如何确保我只为${yyyy} ${mm} ${dd} 传递这 7 个相关值?
2020 03 29
2020 03 30
2020 03 31
2020 04 01
2020 04 02
2020 04 03
2020 04 04
【问题讨论】:
-
您似乎知道
seq。然后for i in $(seq 1 5).