The home side put up a strong fight in their defence of 240, well aided by some superb fielding. However, Shakib put to use all his experience to manoeuvre the tight chase along with the lower order.
Despite two collapses, Shakib helped Bangladesh over the line with a fine 69-run unbroken stand with Mohammad Saifuddin.
Earlier, Wesley Madhevere’s fifty helped Zimbabwe to put up an improved batting show to post 240 for nine from their fifty overs.
Zimbabwe: 240/9 in 50 overs (Wesley Madhevere 56, Brendan Taylor 46, Shoriful Islam 4/46, Shakib Al Hasab 2/42)
Bangladesh: 242/7 in 49.1 overs (Shakib Al Hasan 96 n.o, Luke Jongwe 2/46).