Rohit Sharma and Jasprit Bumrah's brilliance bailed India out yet again as the 'Men in Blue' sealed their spot in the semi-finals for the seventh time in World Cup history with a hard-fought 28-run win over Bangladesh.
In a display that has still left the 2011 champions with certain areas of concern heading to the knockout stage of the tournament, it was Rohit who stood out with the bat yet again, collecting his fourth ton of the ongoing World Cup, drawing level with Sri Lankan legend Kumar Sangakkara for most centuries in a single edition of the World Cup.
While Rohit's ton helped India start off with a 180-run opening stand, India's familiar middle-order problems resurfaced as they ended up collecting just 63 runs off the last 10 overs while losing five wickets to finish on 314/9.
India then got regular wickets during the Bangladesh innings, with Hardik Pandya's (3/60) efforts with the ball playing a key role in restricting the opposition batsmen in the middle overs.
The game was considered done and dusted when Shakib was sent back to the pavilion after getting foxed by a slower ball from Pandya, departing for 66 with another 136 left to chase with just four wickets in hand.
However, the Bangladeshi lower-order refused to give up, and Mohammad Saifuddin (51 not out) and Sabbir Rahman (36) giving India another reminder of why switching off after getting the main threat out can prove costly.
India collected their sixth win in eight games, but their display hasn't quite been convincing since their victory over Pakistan at Old Trafford.
Had it not been for Bumrah's dismissal of Rubel Hossain and Mustafizur Rahman with back-to-back yorkers to end the Bangladeshi chase, India might have ended up on the wrong side of the result, and could've been made to wait a little longer to confirm their berth in the knockouts.
The defeat though, ended Bangladesh's slim hopes of a place in the last four after they had impressed during wins over South Africa and the West Indies.
The day belonged to the in-form Sharma, who played an attacking knock, hitting seven fours and five sixes in his 92-ball innings while being cheered on by another largely pro-India crowd in Birmingham.
Sharma and opening partner KL Rahul put on 180 — the highest stand for the first wicket in the tournament — to get India off to a flying start.
But Sharma should have been out for nine, only for Tamim Iqbal to drop a simple catch at deep midwicket following a mistimed pull off paceman Mustafizur.
Sharma was finally was caught at extra cover by Liton Das off the bowling of Soumya Sarkar and Rahul, who filled an opener's slot following an injury to Shikhar Dhawan, was caught behind off Rubel for 77.
Mustafizur took five wickets, including star batsman Kohli for 26, to check India's surge.
The paceman struck twice in the space of three balls to dismiss both Kohli and Pandya.
Rishabh Pant once again showed his worth at the number four position with a brisk 48, using the short boundary at one side of Edgbaston to his advantage.
Dhoni, who received flak for his slow innings in India's defeat by England on Sunday — their only loss so far this tournament — chipped in with a 33-ball 35.
Paceman Mohammed Shami struck early in Bangladesh's reply when Tamim, who made 22, chopped the ball onto his stumps.
Shakib struck his sixth fifty-plus score that includes two hundreds to keep Bangladesh in hunt.
But Pandya's second spell saw the all-rounder account for Liton and Shakib to leave Bangladesh struggling at 179-6 in the 34th over.
Shakib, who has been Bangladesh's go-to man, played well for his 46th ODI fifty but was undone by a slower ball and caught at extra cover.
Saifuddin made an unbeaten 51 only to run out of partners as Bumrah ended the match with two wickets in successive deliveries.
Bangladesh face Pakistan in their last group match at Lord's on Friday. India meet Sri Lanka on the final day of the round-robin phase on Saturday.
With inputs from AFP.