Bangladesh closed the fourth day’s play at 201-5 in their second innings, an overall lead of 266 with five wickets in hand and a day’s play remaining.
Left-arm spinner Shakib finished with five for 80 as Zimbabwe, who resumed their first innings at 331-5, folded up for 368 before lunch to hand the hosts a lead of 65 runs
Hamilton Masakadza added just four runs to his overnight score of 154 before he was bowled by Shakib, who then dismissed Malcolm Waller to complete his thirteenth five-wicket haul in Tests.
Shakib, who made 137 in the first innings, became only the fifth player to score a century and take five wickets in an innings in the same Test more than once.
England’s Ian Botham achieved the feat five times, while West Indies’ Gary Sobers, Pakistan’s Mushtaq Mohammad and South Africa’s Jacques Kallis did it twice.
Shakib had made 144 and claimed 6-83 against Pakistan in Dhaka in 2011.
Regis Chakabva took his overnight score of 101, his maiden Test century, before he was the last batsman dismissed.
Shakib was supported by seamer Rubel Hossain, who took two wickets, and spinner Taijul Islam, who finished with three for 96.
In Bangladesh’s second innings, Mohammad Mahmudullah returned unbeaten on 63 and Mominul Haque made 54.
Mominul set a new Bangladesh record by completing 1,000 Test runs in 21 innings, surpassing teammate Tamim Iqbal, who did it in 29 innings.
Waller dismissed Shakib and skipper Mushfiqur Rahim off consecutive balls to end the day with figures of four for 48.
The third Test between the two lowest-ranked teams — Zimbabwe at number nine and Bangladesh at 10 — will be played in Chittagong from November 12-16.
The Tests will be followed by five one-day internationals. -AFP