Shami dismissed Keshav Maharaj for 18 on Day 2 of the second Test to joint the elite list.
Wasteful India laboured in the field on the second morning of the second test against South Africa before bowling out their hosts for 335 just before lunch in Pretoria on Sunday.
After South Africa resumed their innings on 269-6, India dropped four catches, including captain Faf du Plessis (63), letting the home side off the hook and allowing them to post a respectable first innings score.
As on day one, India's tight lines in the opening hour made scoring difficult for the batsmen as South Africa managed just 23 runs in that period.
Keshav Maharaj (18) was the first out when he edged Mohammed Shami to wicketkeeper Parthiv Patel, the 100th wicket in test cricket for the seamer.
Kagiso Rabada (11) then hung around for almost 12 overs with Du Plessis, adding 42 for the eighth wicket.
However, India will be frustrated at four spurned chances to end the partnership early, including the rarity of three dropped catches in two balls, all off spinner Ravichandran Ashwin (4-113).
Rabada was missed by India skipper Virat Kohli at slip, and the next ball spooned a simple chance to point.
Hardik Pandya was put off by an onrushing Shami from short third-man though, and spilled the effort onto the latter, who also had a bite at the ball before it dropped to the floor.
Ashwin then induced a thin edge off Du Plessis that was spilled by Parthiv as the frustration grew for the visitors.
First Published: January 15, 2018, 7:50 AM IST