Stokes hit 85 runs in the second innings to steer England to 228-8 at stumps on the third day in Chittagong.
Ben Stokes gave England a firm grip on the first Test with bat and ball before Shakib Al Hasan's 5-79 revived Bangladesh hopes in Chittagong on Saturday.
Stokes hit 85 runs in the second innings to steer England to 228-8 at stumps on the third day after his three-wicket burst earlier in the morning helped them dismiss Bangladesh for 248 runs. The visitors now lead their hosts by 273 runs, which could be handy on a pitch that offered spinners plenty of turn, making life difficult for batsmen from both sides.
Stokes appeared to have mastered the wicket with his counterattacking innings, which came off 151 balls with six fours and three sixes. Jonny Bairstow gave him a good company as the duo shared 127 for the sixth wicket to bail out England from a precarious 62-5 in the second innings.
Bairstow missed out on a very deserving half-century, leaving the pitch for 47 after he was played on by Kamrul Islam, the bowler's maiden Test wicket and only wicket so far taken by a Bangladeshi seamer in the match.
Shakib soon trapped Stokes in front to end an highly impressive innings before he completed his 15th five-wicket haul with the scalp of Adil Rashid.
Chris Woakes (11 not out) and Stuart Broad (10 not out) remained at the crease overnight hoping to extend England's advantage before they set the fourth innings target for Bangladesh. Shakib led Bangladesh's fightback before the lunch break leaving England at 28-3 after the visitors took a 45-run lead in the first innings. England's hopes of building a sizeable advantage were dealt a blow when debutant spinner Mehedi Hasan induced an edge from captain Alastair Cook to send him back for 12.
Shakib trapped Joe Root lbw for one in the next over to take his 150th Test wicket before he had Ben Duckett caught by Mominul Haque at forward short leg for 15. Gary Ballance fell to Taijul Islam for nine after the break before Shakib grabbed his third wicket.
by dismissing Moeen Ali for 14.
It was a comeback for the Bangladesh all-rounder, who put his team in trouble by throwing his wicket off the second ball of the morning.
Resuming on 221-5, Bangladesh were hoping Shakib, who was unbeaten on 31 overnight, would take them close to England's first innings total.
But he went down the wicket before the dust had settled and paid the price as Bairstow completed a simple stumping.
Rashid removed nightwatchman Shafiul Islam for two as Stuart Broad took the catch high on his head at midwicket.
Stokes, who finished with 4-26, had Mehedi lbw for one in the next over before a low catch at slip by Cook ended Sabbir Rahman's effort at 19.
He bowled third debutant Kamrul Islam in the same over to wrap up Bangladesh's innings as the hosts added just 27 runs to their overnight score for the loss of five wickets in 12 overs.