垂直打印月日的动态列表

垂直打印月日的动态列表

我需要在我学习中使用的代码中写几行,我真的放弃了!目前,我可以列出一个月中的天数和等效的天数,但我无法将其链接到系统时钟,因此它会每月自动提取正确的日期数字。

这是我所做的:

#!/bin/bash
for (( i = 0; i < 30; ++i )); do
    echo -e "$( date -d "now +${i} days" +"%a" )", ${i}
done

输出:

Fri, 0 
Sat, 1 
Sun, 2 
Mon, 3 
Tue, 4 
Wed, 5 
Thu, 6 
Fri, 7 
Sat, 8 
Sun, 9 
Mon, 10 
Tue, 11 
Wed, 12 
Thu, 13 
. . . .
 ..  . etc

我希望这段代码列出给定月份中正确的天数。例如,十月份有/31/天。当我在 11 月份运行代码时,它必须列出 30 天,当我在 3 月份运行代码时,它会列出 31 天,在 2 月份运行它时,它会列出 28 或 29 天,依此类推。我怎样才能做到这一点?

答案1

事实上,你很接近。以下是一些小修改:

#!/bin/bash
var=$(cal $(date +"%m %Y") | awk 'NF {DAYS = $NF}; END {print DAYS}') # Get number of days in a month

for (( i = 1; i < ${var}+1; ++i )); do
    echo -e "$( date -d "now +${i} days" +"%a" )", ${i}
done

答案2

date通过询问下个月的第一天来计算最后一天,然后减去一天;然后循环:

begin=1
end=$(date -d "$(date -d "$(date -d "next month" +"%Y%m01")") - 1 day" +%d)

for((i=begin;i<end;i++))
do
  date -d "$(date +%Y/%m/$i)" +"%a, $i"
done

相关内容