Tony de Zorzi and Tristan Stubbs put South Africa in command on 307-2 and left Bangladesh floundering after day one of the second and final Test in Chattogram on Tuesday.
Both men made their maiden hundreds in a second-wicket partnership of 201 after the visitors won the toss and chose to take first use of a good batting pitch as they eye a series sweep.
De Zorzi was unbeaten at stumps on 141, with 10 fours and three sixes, and will resume alongside David Bedingham on 18.
Stubbs played a more conservative innings and hit the mark on his 194th ball by cutting Mominul Haque to the covers for a single.
Taijul Islam was the only bowler to make a dent, first in the morning session by removing Aiden Markram when the stand-in skipper went for a big shot and holed out to Mominul Haque at mid-on for 33.
He bowled Stubbs after tea for 106 when the batsman tried a back-foot punch to the leg side but missed the lowering delivery, which crashed into his stumps.
Bangladesh, desperate to take a wicket, have lost two of their three reviews for the innings.
They unsuccessfully appealed for lbw against De Zorzi off a delivery pitched outside leg and again for a caught behind when Stubbs tried to cut Taijul away but missed.
South Africa made two changes to the side that won in Mirpur as they look to seal the series.
In came Senuran Muthusamy, an all-rounder who can bowl left-arm spin, and fast bowler Dane Paterson in place of Matthew Breetzke and Dane Piedt.
Bangladesh made three changes, bringing in batsman Zakir Hasan, fast bowler Nahid Rana and wicketkeeper Mahidul Islam Ankon for a debut.
Jaker Ali, who made his debut in the first match, is out after suffering a concussion while Nayeem Hasan and wicketkeeper Litton Das were also omitted.
South Africa won the opening Test inside four days with fast bowler Kagiso Rabada taking 6-46 in the second innings.
Bangladesh have played 24 Tests in Chattogram but won only two with seven drawn.
Source: AFP