Having chosen to bat, they were 21-3 after 12 overs, 18-year-old off-spinner Mehedi Hasan Miraz striking twice and going on to take 5-64 in 33 overs.
But Moeen Ali, who survived a total of five reviews, hit eight fours and a six in 68, sharing 88 with Jonny Bairstow.
Dropped on 13, Bairstow struck his fourth successive Test fifty, with eight fours in his fluent 52.
Mehedi was one of three debutants for Bangladesh, who used five spinners on an opening day when only 17 of the 92 overs were bowled by seam.
England gave a debut to Northants batsman Ben Duckett – dismissed by Mehedi for 14 at the top of the order – and opted for three spinners, including 39-year-old Gareth Batty, who is playing his first Test since 2005.
Magical Mehedi sparkles in the heat
A former Bangladesh Under-19 captain, Mehedi is the 26th teenager out of the 81 players to have represented his nation in Tests – compared to just five among the 672 England Test players.
Despite his age he was chosen to open the bowling and it proved an inspired decision.
Duckett, 22, who last month became the first player to win the Professional Cricketers’ Association Player of the Year and Young Player of the Year awards in the same year, tried to smash his first ball in Test cricket to the boundary but made no contact.
Having struck two fours off ineffective seamer Shafiul Islam he was beaten in the ninth over by a magnificent delivery from Mehedi which drifted in towards the pads of the left-hander before zipping off the pitch and rattling the top of off-stump.
Skipper Alastair Cook, playing a record-breaking 134th Test for England, was dismissed by Shakib Al Hasan when a mistimed sweep struck his glove and rolled onto the stumps.
And Mehedi made it three wickets in 14 balls by removing Gary Ballance lbw for a single, with Bangladesh reviewing and the cameras confirming the ball had struck his pad a fraction before the bat and would have gone on to hit the stumps.
Mehedi also took the key wicket of Joe Root, who had looked in complete command until his purposeful 40 from 49 balls ended with an edge caught at slip via the thigh of wicketkeeper Mushfiqur Rahim.
England pair cash in after reprieves
Moeen survived when he had scored one as Bangladesh chose not to review an lbw appeal that replays showed would have dismissed him.
He was given out three times – twice in the first over after lunch – only to be reprieved on referral, while Bangladesh twice thought they had got him, before replays proved otherwise.
Having taken 114 balls to score 29, Moeen only needed another 13 deliveries to reach his fifty, and skipped down the wicket to loft Mehedi over long-on for six.
But Mehedi finally dismissed him with another classic delivery, some sharp spin taking the edge through to Mushfiqur.
Bairstow passed 2,000 Test runs and 1,000 for the calendar year with his fifth half century in his last six Test innings before falling to Mehedi with the second new ball.