Left-arm spinner Razzak returned with five for 29 to restrict Zimbabwe to 219 in 47.2 overs.
In reply, Shakib hit a blistering 105 off just 69 balls, calming nerves on a placid pitch after they lost their top three wickets.
Shakib and number four Raqibul Hasan put on a match-winning unbeaten partnership of 165 off 144 balls to guide the hosts to an emphatic victory with more than 20 overs to spare.
Scoreboard
Zimbabwe
Masakadza lbw b Naeem 34
Chibhabha st Rahim b A’raful 39
Taylor b Razzak 21
Taibu c Roqibul b Naeem 38
Coventry c Siddique b Razzak 0
M’nyeri c Rahim b Ashraful 14
Waller b Razzak 40
Chigumbura c Ullah b Shakib 8
Cremer b Razzak 2
Price (not out) 4
Jarvis lbw b Razzak 0
Extras (B-4, LB-2, NB-8, W-5) 19
Total (all out, 47.2 overs) 219
Fall of wickets: 1-59, 2-96, 3-96, 4-96, 5-130, 6-184, 7-207, 8-215, 9-217.
Bowling: Nazmul 7-0-33-0, Dollar 4.5-0-39-0, Shakib 9-1-24-1, Naeem 8-0-43-2, Razzak 9.2-0-29-5, Ullah 3.1-0-17-0, Ashraful 6-1-28-2.
Bangladesh
Iqbal c M’adza b Chibhabha 26
Siddique c&b Chigumbura 23
Ashraful c Taylor b Chigumbura 3
R Hassan (not out) 39
Shakib (not out) 105
Extras (B-4, LB-2, W-15, NB-4) 25
Total (for 3 wkts, 29.3 overs) 221
Fall of wickets: 1-44, 2-56, 3-56.
Bowling: Jarvis 6-0-59-0, Chigumbura 9-1-47-2, Chibhabha 7.3-0-48-1, Price 4-0-35-0, Cremer 3-0-26-0.
Deccan Herald is on WhatsApp Channels| Join now for Breaking News & Editor's Picks