Rohit Sharma scored his fourth century of the 2019 World Cup, slamming 104 runs. KL Rahul also put 77 on the scoreboard.
Rishabh Pant scored an important 48 off 40 deliveries to steer India's score to 314.
Shakib was in form again, reaching the 500-run mark in his innings of 66.
However, Hardik Pandya removed the danger-man, and also took 3 wickets to pull India back in the game.
Mohammad Saifuddin gave India a scare towards the end, as he remained unbeaten on 51*. However, he continued to run out of partners.
In the end, it was Jasprit Bumrah who rescued India and ended Bangladesh's hopes. He took 4 wickets for 55 runs.