I think there are some gotchas in the syntax of using things like singular &
versus double &&
See this, Stack Overflow Question I found about compound if statements
and what you'll see are a few different stylistic recommendations from the answerers. And further you'll see that many of them qualify their answers by saying "for numbers" or "for strings" and one or two of them show test scripts to prove their solution/recommendation.
My recommendation is that you determine logically what you need to test for and you can nest if-elseif-else in the bash script, like:
if [ a == b ]; then
if [ a > c ]; then
# do something
# do something different
And that you test the results incrementally to build your script. If you try to write it all in a few brief, killer lines it may take a lot to debug when writing it expanded, but clearer may just get done what you intend.
As far as whether or not you have the syntax correct with each of your determinations of dates; you've assigned this information to variables $curyear, $lastyear, and $2yearsago. Echo that information out and you'll see if your syntax is correct for what you intend to see. Also, I personally do not recommend starting any variable name with a number; instead do twoyearsago, or consider TwoYearsAgo, twoYearsAgo, or two_years_ago; something like that.