Sri Lanka's pace bowlers Kasun Rajitha and Asitha Fernando shared five wickets as Bangladesh were reduced to 24-5 in the first hour, having chosen to bat in the second Test in Dhaka on Monday.
Rajitha claimed 3-16 while Fernando had 2-26 as the hosts mounted a rescue mission to reach 66-5 at lunch on the opening day, with Mushfiqur Rahim 22 not out and Liton Das on 26.
Bangladesh won the toss at the Sher-e-Bangla National Stadium but got off to a disastrous start as Rajitha bowled opener Mahmudul Hasan for a duck with the second ball.
Fellow opener Tamim Iqbal, who scored a century in the drawn first Test in Chittagong, also fell for a duck as he managed a leading edge off Fernando in the next over to be caught brilliantly by Praveen Jayawickrama at backward point.
Skipper Mominul Haque tried to settle the nerves with two fours, including one off the first ball he faced, but soon edged Fernando to wicketkeeper Niroshan Dickwella when on nine.
Rajitha then found a big gap between the bat and pad of Najmul Hossain, sending his middle-stump cart-wheeling with an inswinger as the left-hander was dismissed for eight.
He delivered a body blow next ball to trap Shakib Al Hasan leg-before for a first-ball duck, leaving the Bangladesh batting line-up in tatters at 24-5.
Mushfiqur, who hit three fours, and Liton stopped the rot with an unbroken 42-run stand to see the hosts to lunch without any further damage.
Sri Lanka had rewarded Rajitha with a place in the eleven after he impressed in Chittagong by taking 4-60 playing the match as a concussion substitute for Vishwa Fernando.
He was one of their two changes, with Jayawickrama replacing Lasith Embuldeniya.
Bangladesh made two changes from the drawn first Test in Chittagong as Mosaddek Hossain and Ebadot Hossain replaced the injured Nayeem Hasan and Shoriful Islam.
© Agence France-Presse