The 30-year-old all-rounder, playing in just his third match at this level and first in the Caribbean, made an undefeated 115.
His innings helped the West Indies to 450-9 declared before Bangladesh reached 40-2 in reply at stumps.
Greaves, who had been on 11 overnight, took 181 balls to make his century with just four boundaries.
It was an exercise in patience by the Barbadian who shared a 140-run partnership with Kemar Roach for the eighth wicket.
Greaves was the third West Indian to make a half-century after Mikyle Louis (97) and Alick Athanaze (90) on the opening day.
Roach, playing in his 83rd Test, registered his highest score of 47 before he was clean-bowled by Bangladesh seamer Hasan Mahmud.
Mahmud took three of the four West Indies to fall on Saturday, dismissing Joshua Da Silva (14), Alzarri Joseph (four), as well as Roach.
In reply, Bangladesh lost both openers during the 20 overs they faced.
Zakir Hasan had made 15 before he was clean-bowled by Jayden Seales and when Alzarri Joseph tempted Mahmudal Hasan Joy (five) to offer a slip catch to Athanaze, the tourists were rocking at 21-2.
However, experienced batsman Mominul Haque (seven) and Shahadat Hossain (10) stood firm to see their team through to the close without any further dramas.