The Tigers needed a special performance from their bowlers to defend the below average total. And once again, Shakib put his hand up, finishing with 4-35 in his 10 overs to bowl out England for 196 in 43.1 overs.
Pacer Ebadot Hossain, who replaced Taskin, also had a good day with the ball, finishing with 2-37 while left-arm spinner Taijul Islam took 2-52.
With his four scalps, Shakib also became the first Bangladeshi to claim 300 wickets in the 50-over format. Shakib is now the 14th highest wicket taker in ODI history and the currently the only active cricketer to have 300 wickets in the format.
Chasing 247, England got off to a great start as openers Jason Roy and Phil Salt cruised to 54-0 in 8.5 overs.
Shakib broke the partnership by getting Salt caught for 35 off 25 balls to a rather innocuous looking ball.
Ebadot dismissed Dawid Malan for a duck in the next over and Shakib clean bowled Roy (19 off 33 balls) right after that to reduce England to 55-3.
A promoted Sam Curran and James Vince then steadied the innings with a 49-runs partnership where they consumed 81 balls.
Just when England were looking settled, Mehidy Hasan Miraz removed Curran for 23 off 49 balls with a catch at long-off.
Shakib and Ebadot once again struck in consecutive overs, as the left-arm spinner edged out Vince for 38 off 44 balls with a delivery that straightened after pitching on middle stump and the pacer clean bowled Moeen Ali for two with a fuller length delivery.
England were reeling on 130-6 27.5 overs but still had hopes of winning as their captain Joss Buttler was still at the middle.
But those hopes withered away in the 35th over when Taijul struck him on the pads and the on-field umpire was swift to raise his index finger.
Shakib returned to the attack and took the wicket of debutant Rehan Ahmed, his 300th wicket in ODI cricket.
Shakib nearly got a five-wicket haul in his final ball of the match when the on-field umpire gave Jofra Archer out LBW against him. But England took a review and replay showed that the ball would’ve missed the stumps.
But that just prolonged Bangladesh’s victory by just a ball as Mustafizur Rahman took a return catch to dismiss Woakes for 34 off 45 balls to secure Bangladesh’s victory.
Earlier, Bangladesh’s innings got off to a disastrous start, courtesy of pacer Curran.
Curran removed Liton Das for a duck for the second consecutive match and also got the wicket of skipper Tamim Iqbal for 11 off six balls to reduce the Tigers to 17-2 inside three overs.
Shanto and Mushfiq then got together and added 98 runs for the third wicket off 129 balls to put the innings back on track.
Shanto completed his second half-century of the series off 69 balls and was looking well set for a big score before losing his wicket in a run out caused by a miscommunication with Mushfiq.
Mushfiq completed his half-century in the 26th over and hung around for a little longer, forming a 38-run fourth wicket partnership with Shakib.
Mushfiq then lost his wicket after completely misreading a googly from Adil Rashid, which crashed onto his stumps.
Rashid got hit for a six in his following over by Mahmudullah (eight) but had the last laugh, by rattling his stumps in the same over, reducing Bangladesh to 163-5 inside 35 overs.
Shakib then took over the innings, hitting seven fours in a well-paced knock while Bangladesh kept losing wickets at the other end.
Shakib eventually departed as the ninth Bangladesh batter, when Roy took a brilliant running catch at the long off boundary off Archer.
The Bangladesh innings folded the very next ball, when he struck Mustafiz (0) on the pads and appealed for an LBW, which the on-field umpire denied but the third umpire upheld after an England review.
Despite the win, Bangladesh have lost the ODI series 1-2, their first ODI series defeat at home since 2016.
Shakib was rightfully named the player of the match while English spinner Rashid was named the player of the series for eight wickets in three matches.
Both teams will now gear up for the three-match Twenty20 series, which will begin at the same venue on 9 March.