The all-rounder now has 274 wickets at 29.44, five more than second-placed Mashrafe Mortaza (269 at 32.65).
Liton Das set up the win for Bangladesh on Friday night through a 114-ball 102 before Shakib sealed it with a five-wicket haul.
Thanks to Das's workman-like century, built with the help of eight boundaries and no sixes, Bangladesh scored 276/9 in 50 overs and then dismissed the hosts for 121 in 28.5 overs.
With this win, Bangladesh consolidated their second spot on the ICC World Cup Super League standings and now are on 60 points.
Blessing Muzarabani (2/47) helped Zimbabwe make early inroads as he dismissed Bangladesh captain Tamim Iqbal for a duck. The home side kept chipping away at Bangladesh's batting lineup, who were in a spot of bother at 74/4 before Das and Mahmudullah came together to bail the visitors out.
The two put on a 93-run stand for the fifth wicket before Luke Jongwe (3/51) sent Mahmudullah (33) back.
Das brought up his fourth ODI hundred and his third against Zimbabwe in the 40th over. Just when it looked like he would bat till the end, Ngarava got the wicket of the Bangladesh opener. Afif Hossein (45) and Mehidy Hasan Miraz's 58-run stand helped propel Bangladesh to 276/9 in 50 overs.
Zimbabwe faltered early in their chase as they lost both their openers within the first five overs with Taskin Ahmed (1/22) and Mohammad Saifuddin (1/23) picking up a wicket each. Brendan Taylor and Regis Chakabva tried to provide some solidity to the innings but once the skipper was dismissed by Shakib (5/30) for 24, the rest of the lineup folded quickly.
The two sides will face off in the second ODI on July 18.
Brief scores: Bangladesh 276/9 in 50 overs (L Das 102, Mahmudullah 33, A Hossain 45, M Miraz 26) beat Zimbabwe 121 in 28.5 overs (R Chahabva 54; S Al Hasan 5/30) by 155 runs.