月と日の動的リストを縦に印刷する

月と日の動的リストを縦に印刷する

勉強に使用するコードを数行だけ書く必要がありますが、本当にあきらめています!現在、月の日付とそれに対応する日付を一覧表示できますが、それをシステム時計に接続できないため、毎月正確な日付番号を自動的に取得します。

私がしたことは次のとおりです。

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

関連情報