South Africa fast bowler Kagiso Rabada took his 300th wicket and Wiaan Mulder bagged three others as Bangladesh collapsed to 60-6 at lunch on the first day of the opening Test in Mirpur.
Opening batsman Mahmudul Hasan Joy was 16 not out after Mehidy Hasan Miraz was trapped lbw by left-arm spinner Keshav Maharaj for 13 in the last over before the break.
Bangladesh captain Najmul Hossain Shanto earlier won the toss and chose to bat but Mulder soon struck with the new ball.
The seamer removed Shadman Islam for a duck when he edged to captain Aiden Markram at slip with his fourth ball.
In his next over, Mulder accounted for Mominul Haque, on four, who nicked an inswinger to wicketkeeper Kyle Verreynne to leave Bangladesh 13-2.
Najmul had made just seven when he became Mulder’s third victim, flicking to mid-off where Maharaj took the catch.
Bangladesh were teetering at 21-3 which became 40-4 when Mushfiqur Rahim on 11 was bowled by Rabada between bat and pad as the South African celebrated reaching the 300-wicket landmark.
He soon made it 301 Test wickets, removing Litton Das for just one, with Tristan Stubbs taking a stunning catch diving to his left in the gully.
The Test is the first international cricket fixture in Bangladesh since a student-led revolution toppled autocratic premier Sheikh Hasina in August.
Bangladesh are missing all-rounder Shakib al Hasan after security fears forced him to cancel plans to return home.
Shakib announced his retirement from international cricket last month but said that he wanted to play one last red-ball series at home.
The 37-year-old was also a former lawmaker in the government ousted by the revolution, making him a target of public anger.
The series carries points towards the World Test Championship, with the final in England next year.
Bangladesh have never beaten South Africa in a Test.
The second Test begins in Chattogram on October 29.