Kumar Sangakkara thumped his 34th Test century for Sri Lanka before Shakib Al Hasan hit back with two wickets to give Bangladesh something to cheer on the first day of the second Test in Chittagong, on Tuesday.
Sangakkara was unbeaten on 160 as Sri Lanka reached the close of play on 314 for five after captain Angelo Mathews had won the toss and opted to bat.
The stylish left-hander added 178 for the third wicket with Mahela Jayawardene (72) after Bangladesh dismissed openers Dimuth Karunaratne (31) and Kaushal Silva (11) cheaply.
The 36-year-old Sangakkara, who went to his half-century with a six off spinner Mahmudullah, brought up his hundred with a boundary to fine leg off the same bowler.
Jayawardene also looked set for his 34th Test hundred but was out leg before to Mahmudullah after playing across the line.
Sangakkara and Dinesh Chandimal (27) then put 67 for the fourth wicket before the latter was caught at point as he danced down the wicket to left-arm spinner Shakib.
All-rounder Shakib then bowled captain Mathews for