Com ksh93
(também /bin/sh
no Solaris 11):
#! /usr/bin/ksh
eval "$(printf '%(y=%Y m=%-m)T')"
first=$(printf '%(%F)T' "$y-$(((m-1)/3*3+1))-1")
last=$(printf '%(%F)T' "$first next 2 months last day")
echo "$first $last"
first2=$(printf '%(%F)T' "$first last 3 months")
last2=$(printf '%(%F)T' "$first2 next 2 months last day")
echo "$first2 $last2"
Exemplo:
$ ./quarter
2017-04-01 2017-06-30
2017-01-01 2017-03-31
$ faketime 2017-01-31 ./quarter
2017-01-01 2017-03-31
2016-10-01 2016-12-31
Usando sua abordagem, isso seria:
eval "$(date +'y=%Y m=%m')"
case $m in
(0[1-3])
echo "$y-01-01 $y-03-31"
echo "$((y-1))-10-01 $((y-1))-12-31";;
(0[4-6])
echo "$y-04-01 $y-06-30"
echo "$y-01-01 $y-03-31";;
(0[7-9])
echo "$y-07-01 $y-09-30"
echo "$y-04-01 $y-06-30";;
(*)
echo "$y-10-01 $y-12-31"
echo "$y-07-01 $y-09-30"
esac
Em qualquer caso, observe que a sintaxe das atribuições de variáveis em shells semelhantes a Bourne é:
var=value
Não há espaço nos dois lados de =
.