スクリプトで月末の日を調べる
バイトで、半年前から先月まで、一ヶ月ごとのデータを調べる機会があった。
範囲を指定するときに、引数で月初月末の日付を渡していたが、なんかカッコ悪い。
せっかくの機会なのでどうやったら調べれるか試してみる。
環境はvirtualbox上のCentos7
dateコマンドの[d]オプションを使えば、いろいろできそう
[vagrant@localhost ~]$ date +'%Y-%m-%d' -d "2 month ago" 2018-03-27
なるほど
なら、月初の1日前を求めれば最終日になりそう(月初は絶対に1日だけど、月末は31,30,28などいろんなパターンがあるから)
[vagrant@localhost ~]$ date +'%Y-%m-%d' -d "2 month ago `date +'%Y-%m-01'` 1 days ago" 2018-02-28
ほうほう
で、何年何月からってやりたいから
[vagrant@localhost ~]$ date +%Y-%m-%d -d "`date +'2017-03-01'` 1 days ago" 2017-02-28
で、あとはこれをいい感じにスクリプトにして
[vagrant@localhost ~]$ cat date_check.sh #!/bin/bash date +%Y-%m-%d -d "`date +'$1-$2-01'` 1 days ago" [vagrant@localhost ~]$ ./date_check.sh 2017 03 date: `$1-$2-01 1 days ago' は無効な日付です
あれ、変数が展開されない。。。。
調べたら、シングルクオートは変数展開されないらしい。 そして、入力した月の最終日がしりたいので、月に1をたしてから計算しよう
#!/bin/bash YEAR=$1 MONTH=$(($2+1)) date +%Y-%m-%d -d "`date +"$YEAR-$MONTH-01"` 1 days ago"
[vagrant@localhost ~]$ ./date_check.sh 2017 03 2017-03-31
できたできた。