Ksh
如何在 UNIX (HPUX) 中獲取上個月的最後一天
我正在創建一個腳本,用於收集上個月用於報告的資訊:
到目前為止,我有以下變數:
#I used an array to get the previous month. set -A months Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov x=`date +%m` y=`expr $x - 1` year=`date +%Y` month=`perl -MPOSIX=strftime -le '@t = localtime; $t[3] = 1; $t[4]--;print strftime("%m", @t)'` month_abv=`echo ${months[$y]}`
變數輸出:
year=2017 month=04 month_abv=Apr
我現在需要的只是上個月的最後一天。
我獲得上個月最後一天的方法是:
cal $month $year | awk 'NF {DAYS = $NF}; END {print DAYS}'
使用可變佔位符,我可以獲得前幾個月的日曆並列印該月的最後一天:
cal 04 2017 | awk 'NF {DAYS = $NF}; END {print DAYS}'
輸出:
30
如果有更簡單的方法或更短的方法,我願意接受所有建議。
您可以使用 GNU 計算本月第一天之前的一天
date
:date -d "$(date +"%Y-%m-01") - 1 day" +"%F"
或使用
dateutils
’sdateadd
:dateadd "$(date +"%Y-%m-01")" "-1d"
或有點棘手的
dateutils
用法。舍入到最後 31 個月的一天。(記錄在案的行為甚至可以在少於 31 天的情況下持續幾個月。)$ dateround --next today -31d 2017-04-30 $ dateround --next "2016-03-10" -31d 2016-02-29