2014-04-25 104 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

非常感谢格伦。周末愉快! –

相关问题