Sri Lanka reached 160-3 after their spinners bowled out Bangladesh for 188 in 44 overs on the first day of the first Test on Monday.
Bangladesh dismissed Marvan Atapattu (18), Sanath Jayasuriya (46) and Kumar Sangakkara (30) after surrendering the initiative during a spectacular mid-afternoon batting collapse.
Rangana Herath and Muttiah Muralitharan shared seven wickets as the tourists lost their last eight for 35 runs. Left-armer Herath took four for 38 and Muralitharan three for 42.
Sri Lanka were still strongly placed at the close, trailing by just 28 runs with Thilan Samaraweera on 33 not out and vice-captain Mahela Jayawardene on 17 not out.
Bangladesh made a good start after being put into bat under overcast skies as skipper Habibul Bashar hit a 96-ball 84, including 12 boundaries.
Opener Shariar Nafees, making his debut, had departed quickly for three as Lasith Malinga's full length inswinger knocked back his middle stump.
But Bashar and Javed Omar (30), dropped early by Atapattu at mid-off, rallied for a partnership of 59 that included a regular flow of boundaries.
Fast bowler Dilhara Fernando ended the stand when Omar was caught by diving wicketkeeper Sangakkara after edging an outswinger. Bashar then added a further 92 in 120 balls with Ashraful to leave the tourists in a strong position.
TRIGGERED COLLAPSE
The fall of Ashraful for 17, caught at deep mid-off trying to smash Herath over the top, triggered a collapse as the tourists lost five wickets in 20 balls.
Herath bowled Tushar Imran for a duck in his next over and Bashar was run out by a reflex throw from short leg fielder Tillakaratne Dilshan.
Muralitharan deceived Khaled Mashud (two) with his doosra, edged low to Samaraweera at slip. Two balls later Samaraweera snapped up another low catch off Aftab Ahmed, this time off Herath.
Syed Rasel, making his debut, provided some resistance with 19 before being stumped off Herath to end the innings.
Sri Lanka reached tea on 30-0 but then lost Atapattu to a poor lbw decision as the right-hander edged a Rasel delivery onto his pad.
Jayasuriya cracked five boundaries in his 54-ball 46 before being brilliantly caught by Ahmed at extra cover.
Sangakkara struggled with his timing, labouring 82 balls for his 30 runs, before miscuing a pull stroke straight to mid on.
Bangladesh, who have lost their previous three Tests to Sri Lanka, will play two back-to-back matches in the series.
Scorecard
Bangladesh (1st innings):
J. Omar c Sangakkara b Fernando 30
S. Nafees b Malinga 3
H. Bashar run out 84
M. Ashraful c Fernando b Herath 17
T. Imran b Herath 0
A. Ahmed c Samaraweera b Herath 0
K. Mashud c Samaraweera b Muralitharan 2
M. Rafique lbw b Muralitharan 9
S. Rasel st Sangakkara b Herath 19
S. Hossain lbw b Muralitharan 2
E. Haque jnr not out 0
Extras: (b-8, lb-2, nb-11, w-1) 22
Total: (all out, 44 overs) 188
Fall of wickets: 1-4, 2-63, 3-155, 4-156, 5-156, 6-158, 7-158, 8-170, 9-176, 10-188
Bowling: Vaas 6-1-25-0; Malinga 8-1-44-1 (nb-7, w-1), Fernando 4-0-29-1 (nb-2), Muralitharan 14-1-42-3, Herath 12-4-38-4 (nb-2).
Sri Lanka (1st innings):
S. Jayasuriya c A. Ahmed b Shaha. Hossain 46
M. Atapattu lbw b Rasel 18
K. Sangakkara c Ashraful b Rafique 30
T. Samaraweera not out 33
M. Jayawardene not out 17
Extras: (lb-4, nb-11, w-1) 16
Total: (for 3 wickets, 44 overs) 160
Fall of wickets: 1-41, 2-97, 3-130
To bat: T. Dilshan, C. Vaas, R. Herath, M. Muralitharan, D. Fernando, L. Malinga.
Bowling: Rasel 9-1-41-1 (nb-6), Shaha. Hossain 11-0-48-1 (nb-2, w-1), Rafique 14-5-35-1, Haque jnr 9-3-30-0 (nb-3), Ashraful 1-0-2-0.