Naeem Islam scored a patient maiden century as Bangladesh reached 455 for six wickets and made West Indies toil hard on a placid wicket in the first test in Dhaka on Thursday.
The home side rode on Naeem's 108 to cut West Indies' lead to 72 at close on the third day after the tourists had declared their first innings at 527-4 on the previous afternoon.
It is already Bangladesh's second highest score in tests and they can realistically hope to improve their best of 488 all out against Zimbabwe in Chittagong in 2005.
Bangladesh, who resumed on 164 for three, had a record 167-run fourth-wicket partnership between Naeem and Shakib to thank for taking them to this position.
"All over the game I try to maintain a certain game plan, select some shots and try to execute only those in the middle," Naeem, playing his seventh test, told reporters.
"I don't want to try anything different.
"I only try to play strokes to the balls that are in my zone," said the 25-year-old whose previous test best was 59 not out in March 2010.
Shakib missed out on his third test century when he fell to Ravi Rampaul for 89 half an hour into the second session with substitute fielder Assad Fudadin taking the catch at cover.
He had been given a reprieve on 26 when nicking Rampaul to wicketkeeper Denesh Ramdin as television replays confirmed the bowler had overstepped.
Naeem played solidly, completing his century off 228 balls with a boundary through the fine leg off Tino Best.
Darren Sammy ended his resistance forcing an edge to Ramdin but not before the 26-year-old right hander, unbeaten on 27 overnight, had faced 255 balls and stayed nearly six hours at the crease.
Naeem, who also added 76 runs with Mushfiqur Rahim for the fifth wicket, hit 17 fours in his innings.
West Indies debutant left-arm spinner Veerasammy Permaul took a return catch to make Rahim his first test victim after the Bangladesh captain scored 43.
Nasir Hossain (33 not out) and Mahmudullah (42 not out) were at the crease when the stumps were drawn as Bangladesh eased past the 450-run mark for only the second time in their 12-year test history.