Bangladesh bowled Zimbabwe out for 282 and built a 272-run lead by stumps on the third day of the second test, pushing for the win that would level the series between cricket's lowest-ranked teams.
Seamer Robiul Islam took 5-85 and spinner Sohag Gazi had 4-59 to do the damage for the Bangladeshis at Harare Sports Club as Zimbabwe fell well short of Bangladesh's first-innings 391.
The Bangladesh batsmen then pressed home their advantage in the final test, with Shakib Al Hasan and Mushfiqur Rahim both making half-centuries in the 163-5.
Shakib was out late in the day for 59, but his partnership of 84 with skipper Rahim, who was 50 not out at the close, took Bangladesh away from danger at 18-3 and 65-4 and into a match-winning position with two days to go.
Continuing on 158-4, Zimbabwe lost Malcolm Waller early and relied on 86 by allrounder Elton Chigumbura to get it close to 300. Wicketkeeper Richmond Mutumbami also chipped in with 42 in just his second test but after Chigumbura became one of Islam's five wickets, the Zimbabweans bell away to concede a 109-run, first-innings deficit.
Zimbabwe had a glimpse of a turnaround when it removed Tamim Iqbal, Jahurul Islam and Mohammad Ashraful cheaply, partly thanks to paceman Shingirai Masakadza's opening burst that eventually helped him to 3-33.
But Shakib and Rahim, as they did in the first innings, settled Bangladesh and forged toward a 300-run lead before Shakib fell to Chigumbura four overs from stumps.
Zimbabwe won the first of the two tests in Harare by 335 runs.