England declared in the morning session on Monday and then took five wickets to leave Bangladesh struggling at 191 for five at stumps on day four, chasing an improbable victory target of 513 in the first cricket Test.
At stumps, Junaid Siddque was unbeaten on 68, with Mushfiqur Rahim on 47 to leave the home side 321 runs behind and thwarting England's bid to wrap up the match in four days.
Siddique and Rahim put on a patient 81-run stand, adding 66 runs in the third session.
England rocked Bangladesh, dismissing both the openers early. In-form opener Tamim Iqbal (14) was bowled by Graeme Swann and Imrul Kayes (23) was caught by Matt Prior off Steven Finn before the lunch interval.
England claimed three more Bangladesh wickets — Aftab Ahmed (26), Mahmudullah (5) and captain Shakib Al Hasan (4) — in the second session. Swann dismissed Shakib, while Tim Bresnan got the wickets of Aftab and Mahmudullah.
England's stand-in captain Alastair Cook declared England's second innings at 209 for seven after adding 78 to the overnight score.
It was England's second declaration of the match after Cook and Paul Collingwood contributed centuries to its first-innings total of 599 for six decl.
England is the only Test-playing nation never to have lost to Bangladesh in any form of the game.