The total, compiled at a brisk rate of 3.41 runs per over, was more than the touring side's combined score in two innings in the first Test in which Bangladesh were crushed by 335 runs.
Shakib scored his runs off 118 balls before a wild slash off Elton Chigumbura was caught by wicketkeeper Richmond Mutumbami.
"It was a stupid shot and I caused the team a lot of trouble because of it," he told reporters.
Shakib, however, shared a partnership of 123 with captain Mushfiqur Rahim to steady the innings after Zimbabwe had taken the first four wickets for 125.
Mushfiqur was trapped lbw off Kyle Jarvis for 60 but the scoring momentum was kept up by Nasir Hossain who scored a brisk 37 off 39 balls for finish not out at the close.
Zimbabwe were let down by laboured bowling and several dropped catches and missed run-out chances, although Shingi Masakadza did run out opener Tamim Iqbal for 49 with a smart piece of fielding.