The loss, on the other hand, ended Bangladesh's dreams of reaching the last four of a World Cup for the first time in their history.
All the Bangladesh batsmen barring one made a decent score, but apart from Shakib no one could make it big, something the Tigers will look to work on.
Chasing 315, they were dealt the first blow when Mohammed Shami bowled Tamim Iqbal (22) on 39. Soumya Sarkar (33) was still keeping Bangladesh on course for the chase, but the moment he gave an easy catch to Virat Kohli off a Hardik Pandya delivery, their chances further diminished and the fall of Mushfiqur Rahim (24) a few overs later all but sealed the fate of the game.
Shakib kept on the fight though, making 66 in 74 deliveries till Pandya struck again, this time Dinesh Karthik taking the catch. Shakib's beautiful innings, which featured six fours, took him to second in the scoring charts of this World Cup. The all-rounder now has 542 runs, just two short of Rohit.
Sabbir Rahman and Mohammad Saifuddin made 66 in the seventh wicket partnership to give the score a better look. Sabbir contributed 36 while Saifuddin was unbeaten on 51 when the team were bundled out for 286. Saifuddin's 38-ball innings featured nine fours.
Jasprit Bumrah bagged four wickets while Pandya claimed three to torment the Tigers.
Batting first, Rohit Sharma's fourth century in this World Cup led India to 314 for 9. Openers Rohit and Lokesh Rahul had given them a fine start and their fans were eyeing 400, but Bangladesh bowlers, led by Mustafiz, staged a great comeback late in the Indian innings.
Rohit, dropped on nine by Tamim Iqbal, became only the second man in the history to score four tons in a single edition of a World Cup, emulating Sri Lanka legend Kumar Sangakkara, who hit centuries in four straight games in 2015.
Making the most of the dropped catch, Rohit went on to make 180 in the opening partnership with Rahul, which was broken by Soumya Sarkar when Liton Das took a catch.
Rohit's 104-run innings featured seven fours and five sixes and it sent him to the top of the scoring charts. Rahul soon followed him to the pavillion as Rubel Hossain made him give a catch behind the wicket, after he had made 77 in 92 balls.
The return of the openers was soon followed by a double strike from Mustafizur Rahman, as he claimed the wickets of Virat Kohli (26) and Hardik Pandya (0) in three balls.
Rishabh Pant's 48 off 41 balls and MS Dhoni's 35 off 33 then took India past 300.
Bangladesh will play their last game against archrivals Pakistan on Friday. A win in that game will be seen as the perfect ending to this wonderful campaign, led by a certain Shakib Al Hasan.
He will also have an eye on two personal accolades, the one for the highest run scorer and the Player-of-the-Tournament.
So it is over, but again not over for Shakib. And Bangladesh.-ProthomAlo