Shakib scored 101 off 99 balls to lead the team to 281-7 and then grabbed 4-41 as the home side dismissed Zimbabwe for 194 in 42.1 overs to take 1-0 lead in the five-match series.
Shakib shared 148-runs in a record fifth-wicket partnership with Mushfiqur Rahim to help Bangladesh recover from 4-70 to a competitive score after they were put in to bat first.
Shakib, who also had a hand in Bangladesh's previous highest fifth-wicket stand of 119 runs, against South Africa in Dhaka in 2008, struck 10 fours.
Debutant Sabbir Rahman provided a late sparkle hitting an unbeaten 44 off 25 balls, which included three fours and three sixes.
More From This Section
Tinashe Panyangara claimed highest three wickets for Zimbabwe at the expense of 66 runs.
Zimbabwe started their chase positively, reaching 46 runs in the first seven overs, before Shakib put a brake on their innings with two wickets in his second over.
Fellow spinners Arafat Sunny (2-22) and Mahmudullah (2-40) and paceman Mashrafe Mortaza (2-33) gave him ample support making regular breakthroughs.
Brendan Taylor made highest 54 runs for Zimbabwe before he became the victim of a spectacular catch by Rahim off Mortaza.
The second ODI will be held at the same venue on Sunday.