Tigers have set Zimbabwe a target of 449 runs to win the third Test in Chittagong.
They declared on 319 for 5, just under an hour into the final session on the fourth day, with Mominul Haque picking up his fourth Test century and Tamim Iqbal getting 65, reports espncricinfo.
Zimbabwe will now have to bat out the final 19 overs and the entire fifth day.
The session saw Mominul chip away at the flagging visitors and Shakib cross the 250-run mark in the three-match series, apart from his 18 wickets.
Mushfiqur Rahim blasted four boundaries and two sixes in his 30-ball 46, and although it was expected he would declare after getting out, Shuvagata Hom was out in the middle for 1.2 overs before the declaration came.
Mominul ended up unbeaten on 131 off 189 balls with 13 boundaries.
Apart from picking up fours regularly, he ensured that singles and twos were hardly missed throughout his stay on the fourth day.
He had a nervous moment when on 89 as an lbw appeal was reviewed after it was turned down. But the ball was too high and the on-field umpire's decision stood.
He was stuck in the nineties for 23 deliveries but finally reached the milestone with a dangling bat that guided the ball through the gap between point and short third-man.
Mominul began with two drives that beautifully threaded through extra cover and mid-off. There were two drives through mid-on, as well as standard fours with sweeps, pulls and cuts.
He has now joined Everton Weekes, Alec Stewart, Matthew Hayden, Jacques Kallis, Simon Katich and Kumar Sangakkara as batsmen with 50-plus scores in nine consecutive Tests.
He has also become the fourth batsman after Weekes, Sunil Gavaskar and Mark Taylor to score 50-plus eleven times in his first 12 Tests.
Mominul added 88 for the second wicket with Tamim Iqbal, who was bowled for 65 when an attempted glide, which had come off twice earlier, didn't work against Natsai M'shangwe.
It was the Zimbabwe legspinner's first wicket of the game after bowling 58 overs.
Mahmudullah also batted well, hammering a 28-ball 30 with three fours and a six which was caught in the boundary momentarily but the fielder's feet had touched the boundary rope.
He and Mominul added 55 runs in 10.3 overs, an acceleration Bangladesh required at the stage.