Bangladesh's miserable Asia Cup campaign finished without victory after Sri Lanka claimed a battling three-wicket win in Mirpur.
Captain Angelo Mathews' unbeaten 74 steered Sri Lanka home after they had hit trouble in pursuit of 204-9.
Sri Lanka slumped to 75-5, but an 82-run stand between Mathews and Chaturanga de Silva (44) swung the match.
Sri Lanka had already booked their place in Saturday's final against Pakistan.
Bangladesh reached the Asia Cup final two years ago, when the tournament was also held on home soil, but will now host the World Twenty20 low on confidence.
Mushfiqur Rahim's side most significantly lost to Afghanistan - the first time a Test-playing nation had done so - and will face them in the World Twenty20 opener in Mirpur on March 16.
Anamul Haque top scored on Thursday, falling one run short of a half-century, with fellow opener Shamsur Rahman adding 39.
Al-Amin Hossain then removed Kusal Perera and Kumar Sangakkara in his first two overs of Sri Lanka's reply before Mahela Jayawardene was run out without scoring.
With his two most experienced campaigners gone early, Mathews stood up under pressure to ensure Sri Lanka won with an over to spare and that they would go into the final with a perfect record from four games.