Sri Lankan spin bowler Rangana Herath picked up five wickets as Bangladesh were dismissed for 240 on the opening day of the second Test in Colombo.
The left-armer snared four successive middle-order wickets, including top scorer Mominul Haque for 64, and then dismissed Nasir Hossain for 48 to end the innings.
He finished with 5-68 while seamer Nuwan Kulasekara returned 3-54 after captain Angelo Mathews won the toss and sent the tourists in to bat at R. Premadasa Stadium.
Wickets fell steadily throughout, opener Tamim Iqbal making just 10 before Nuwan Kulasekara switched around the wicket and immediately trapped him lbw.
Jahurul Islam and Mohammad Ashraful put on 35 before Shaminda Eranga produced a fine piece of fielding to run out the latter for 16. Mominul was then almost run out for five, just beating Kumar Sangakkara's direct hit, as he made an otherwise steady start to his innings in partnership with Jahurul, who eventually fell to Eranga for 33 from 129 balls.
Boundaries off Kulasekara and Eranga in successive overs were Mominul's only ones on his way to a 79-ball half-century, which he reached by sweeping Herath for a single shortly after the spinner dismissed Mahmudullah for eight.
Seven runs came in an over from Suranga Lakmal, whom Mominul then pulled for his third four in the penultimate over before tea.
There was time, though, for one more wicket before the interval as Herath darted a ball through Mushfiqur Rahim's defences. The wicketkeeper, who in the first Test made Bangladesh's first-ever double century, could manage only seven this time.
Mominul added only one more after tea before becoming Herath's third victim, caught behind by Dinesh Chandimal, although he was clearly disappointed with the decision and replays suggested he may have been hard done by.
Nasir and Sohag Gazi put on 59 for the seventh wicket before the latter was duped by Herath and stumped for 32. Abul Hasan fell cheaply, as did fellow tail-ender Rubel Hossain, and when Nasir missed a sweep at Herath when seeking his half-century, the spinner had five wickets.
The hosts had an awkward few overs to bat out before stumps, finishing on 18-1, with Tillakaratne Dilshan out for a duck in the third ball of the innings, edging Robiul Islam behind to Rahim.