월과 일의 동적 목록을 세로로 인쇄

월과 일의 동적 목록을 세로로 인쇄

공부할 때 사용하는 코드 몇 줄만 작성해야 하는데 정말 포기하고 있어요! 현재는 한 달의 날짜와 이에 상응하는 날짜를 나열할 수 있지만 이를 시스템 시계에 연결할 수 없으므로 매달 정확한 날짜 번호를 자동으로 가져옵니다.

내가 한 일은 다음과 같습니다.

#!/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

나는 이 코드가 특정 달의 정확한 일수를 나열하기를 원합니다. 예를 들어 10월에는 /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

관련 정보