2014-04-25 132 views
1

我的ksh版本不允許使用date -d。如何使用korn shell獲取上個月的第一天/最後一天

當前月份是1月份時,波紋管代碼有問題。

#!/bin/ksh 

yy=`date +%Y` 
mm=`date +%m-1|bc` 

[ $mm -lt 1 ] && (mm=12;yy=`expr $yy - 1`) 
[ $mm -le 9 ] && mm="0$mm" 
getcal=`cal $mm $yy` 
last_dd=`echo $getcal|awk '{print $NF}'` 
dd1=`echo $getcal|awk '{print $10}'` 

first_dd="0$dd1" 

echo $yy$mm$last_day 
echo $yy$mm$first_day 

回答

1

您使用的是子shell:您所做的任何變量的變化就無法生存的子shell退出:

$ m=5; (m=10); echo $m 
5 

使用不同的分組構建

[ $mm -lt 1 ] && { mm=12; ((yy -= 1)); } 

如果您有GNU日期,你可以這樣做:

$ first_of_this_month=$(date "+%Y-%m-01") 
$ date -d "$first_of_this_month - 1 day" "+%Y-%m-%d" 
2014-03-31 
$ date -d "$first_of_this_month - 1 month" "+%Y-%m-%d" 
2014-03-01 
+0

非常感謝格倫。週末愉快! –

相關問題