Set 322 for victory, the Tigers made a rapid start but lost two quick wickets to leave the game evenly poised at 133-3 off 19 overs.
But Shakib took apart West Indies’ one-pace attack, reaching his second successive century of the tournament off 83 balls.
He put on 189 with Liton Das, who accumulated calmly before sensationally accelerating, hitting Shannon Gabriel for three consecutive sixes.
Das, making his World Cup debut, ended with a brilliant 94 not out off 69 balls, hitting a four to take Bangladesh to their target with 51 balls to spare.
West Indies’ 321-8 was built around Shai Hope’s measured 96, Evin Lewis’ entertaining 70 and a brutal 26-ball 50 from Shimron Hetmyer.
Victory lifted Bangladesh to fifth in the table and maintains their chances of reaching the semi-finals, while also effectively ending West Indies’ hopes.
Jason Holder’s side will have to win their four remaining games, including tough matches against India and New Zealand, to stand a chance, but they looked stunned after a humbling defeat.
This was no shock, though – Bangladesh have now won five one-day internationals in a row against West Indies and outperformed them in all areas.
West Indies’ fast bowlers started the tournament dismantling top-order batsmen but their effectiveness has waned and the lack of a plan B was ruthlessly exposed here – 55 per cent of all deliveries were short despite Bangladesh playing that length with ease.
Openers Tamim Iqbal and Soumya Sarkar cut and pulled with aplomb, as did Shakib after Sarkar guided to Chris Gayle in the slips.
It meant Bangladesh never had to panic about the required rate, even when Tamim was brilliantly run out by Sheldon Cottrell – gathering a drive hit back to him and throwing down the stumps in one movement – and Mushfiqur Rahim was caught behind down the leg side.
Still the five Windies pace bowlers kept dropping short or pushing it too full and were punished by Shakib, who hit exquisite drives down the ground and brought up his ninth ODI hundred with a sumptuous cover drive.
A dejected West Indies were hampered by the injured Andre Russell – who earlier made a two-ball duck – barely able to jog after
six laboured overs, meaning they had to resort to Gayle’s gentle off-breaks, while
they were also sloppy in the field.
Das capitalised, knocking it around to reach 50 off 43 balls before hitting his next 44 runs off just 26 deliveries as Bangladesh rushed to victory in front of their joyous fans.
In chasing 322, they beat their own mark in passing 319 against Scotland in 2015, behind only Ireland’s successful pursuit of 328 against England in 2011.