Ferran Torres put his side in front just before the half-hour mark when his powerful strike was awarded after initially being ruled out for an offside infringement.
Barcelona added a second before the half-time interval, with Fermin Lopez rifling home the first Champions League goal of his career.
After Torres had a strike disallowed in the 59th minute, Barcelona were left stunned when Shakhtar halved the deficit through Georgiy Sudakov.
Shakhtar continued to push forward in search of an equaliser, but Barcelona managed to see out the remainder of the contest to maintain their 100% record in the group stage.
The result takes the group leaders onto nine points, while the Ukrainian champions remain in third place with three points to their name.
After being appointed as Shakhtar boss on Tuesday, Mario Pusic was thrown in at the deep end for his first game against the La Liga champions.
Shakhtar goalkeeper Dmytro Riznyk was forced into action in the opening stages, pulling off a fine stop to keep Lopez at bay.
As the first half passed the midway point, Manchester City loanee Joao Cancelo ventured into the box, before driving a left-foot strike straight at the goalkeeper.
Barcelona's relentless pressure ultimately told in the 28th minute when Torres thumped home after Lopez's initial effort had rattled the woodwork.
The assistant's flag appeared to cut short Torres' celebrations, but his fifth goal of the season was ultimately awarded following a VAR review.
The Spain international turned provider for Barcelona's second, laying the ball into the path of Lopez, who drove the ball in off the inside of the post.
After taking a two-goal lead into the break, a confident Barcelona side went in search of a third after the restart.
Torres had the ball in the net just short of the hour mark, but the offside flag denied him a second goal of the evening.
From out of nowhere, Shakhtar pulled a goal back against the run of play, with Sudakov firing in at the near post after latching onto Irakli Azarov's through ball.
After being caught off guard by Sudakov's first Champions League goal, Barcelona immediately began their quest to restore their two-goal cushion.
Lopez continued to offer a threat for the hosts, as he crashed a low strike against the post, before his headed effort was chalked off for offside.
With the deficit still a narrow one, the visitors started to fancy their chances of snatching a point in the closing stages.
As the contest entered the final 10 minutes, Shakhtar captain Taras Stepanenko sent his first-time shot agonisingly wide from Azarov's inviting delivery.
The visitors ultimately ran out time, as Barcelona held firm to pick up a victory ahead of Saturday's crucial clash with rivals Real Madrid.
Shakhtar will have the chance to avenge the defeat when they face Xavi's side in the reverse fixture on November 7.