Zimbabwe are still in the running to avoid a series defeat against Bangladesh, after they won the third T20 in Khulna by 31 runs to make it two-one with a game to play.
Zimbabwe batted first, and 40-odd scores from Vusi Sibanda and Malcolm Waller saw them post 187 for six after a short rain delay. The Tigers were unable to chase that down, reaching 156 for six.
The visitors won the toss and opted to bat, putting faith in their batsmen to set a defendable score. Everyone in the top order got starts, with Sibanda and Hamilton Masakadza putting on 45 for the first wicket inside four overs.
Once Masakadza was out for 20, Sibanda continued with Richmond Mutumbami, who also made 20 before departing. Sibanda fell soon afterwards, for 44. He was one of Shakib-al-Hasan's three wickets.
But Waller and Sean Williams made sure to keep the run rate up despite the loss of wickets. Williams added 32 off 26 balls, while Waller smacked his 49 off just 23 deliveries, including four sixes.
The hosts got off to a poor start when they lost Imrul Kayes for one in the first over, but seemed to recover when Soumya Sarkar and Sabbir Rahman put on a half century stand in quick fashion.
But Sarkar was out for 25, and Sabbir for 50, and after that there was little to be done as more wickets fell cheaply. A valiant 30 not out from Nurul Hasan was not enough to combat the spin of Graeme Cremer, who took three wickets.
The final T20 will be played on 22 January at the same venue.