Shakib’s brilliance with both bat and ball saw Bangladesh earn a consolation win in the three-match series and deny England a clean sweep.
The left-handed batter notched up a quick-fire 75 to take Bangladesh to a fighting 246 before he ripped apart England’s top order to finish with figures of 4-35.
In the process, the 35-year-old became the first Bangladesh player to take 300 ODI wickets.
England’s openers Jason Roy and Phil Salt laid the foundation for the run-chase with a 54-run partnership before the tourists lost three quick wickets.
James Vince, Sam Curran and Jos Buttler also got starts but wickets fell at regular intervals as Shakib dismissed three of the top four batsmen.
Shakib almost capped his performance with a five-wicket haul when he trapped Jofra Archer lbw with his final delivery but the England pacer successfully reviewed the decision before Chris Woakes became the last wicket to fall in the next over.
Earlier, Bangladesh won the toss and opted to bat but all-rounder Curran gave England an ideal start after dismissing the two openers in his first spell.
But Shakib smashed 75 off 71 deliveries while Mushfiqur Rahim (70) and Najmul Hossain Shanto (53) also notched half centuries to help Bangladesh post a respectable total.
The hosts’ last six batsmen failed to build on the middle order’s partnerships, however, as England pacer Archer finished with three wickets while Adil Rashid picked up two.
England will next play Bangladesh in three Twenty20 matches starting on Thursday.
(With Reuters Inputs)