The tourists, unsettled by both pace and spin, lost their top five batsmen for 50 runs before going to lunch on the opening day at a miserable 64-7.
Fast bowler Dilhara Fernando claimed three wickets and off-spinner Muttiah Muralitharan took two.
Openers Javed Omar and Shahriar Nafees put on 28 by the eighth over when Sri Lanka hit back with a vengeance.
Lasith Malinga had Nafees (15) caught down the leg-side by wicket-keeper Prasanna Jayawardene, who had missed a similar chance off the same batsman two overs earlier.
In the next over, Chaminda Vaas forced Omar to edge an outswinger to the 'keeper before Bangladesh had added another run.
Fernando, who replaced Malinga, claimed former captain Habibul Bashar for two and then trapped new skipper Mohammad Ashraful in a well-executed plan.
Ashraful, 22, pounced on a short delivery and hooked to deep square-leg where debutant Malinda Warnapura was pefectly placed to take the skier.
Ashraful, the only Bangladesh batsman to score two centuries against the Sri Lankans, made seven.
Muralitharan, who was introduced in the 18th over, struck with his fifth delivery when Rajin Saleh missed a backfoot defensive shot and was caught in front of the wicket.
Saleh batted for an hour to make three runs.
Muralitharan, who grabbed 50 wickets in six previous Tests against Bangladesh, then trapped Shakib-Al Hasan leg-before for 16 to reduce the tourists to 61-6.
Shahadat Hossain became Fernando's third victim, holing out to the covers, at which stage the umpires called lunch. Khaled Mashud was the unbeaten batsman on three.
The hosts left the wicket-keeper's duties to Prasanna Jayawardene as regular stumper Kumar Sangakkara took the field as one of the seven specialist batsmen in the side.
Opening batsman Warnapura, nephew of Sri Lanka's first Test captain, Bandula Warnapura, made his debut in the absence of Sanath Jayasuriya, Upul Tharanga and Marvan Atapattu.
Bangladesh will play three Tests and as many one-dayers on the five-week tour.