The locals dominated from the start despite missing several key players due to injury and suspensions, and they opened the scoring in the 28th minute with a Torres volley from a rebound after 20-year-old Lopez’s strike from close range smashed into the right post.
The goal was initially ruled out for a hint of an offside in the build up, but a VAR check confirmed that Lopez was onside when he struck from inside the box.
Without the injured Robert Lewandowski, Raphinha, Sergi Roberto, Frenkie de Jong, Jules Koundé and Pedri, and with midfielder Gavi suspended for a red-card in their win against FC Porto, Barca manager Xavi Hernandez called up eight academy players including Lopez who is becoming a regular in the first team.
He caused all kinds of trouble for Shakhtar and extended Barca’s lead in the 36th, unleashing a thunderous shot that ricocheted off the left post on its way in.
Barca then missed several chances to stretch out their lead, with Lopez hitting the post twice more and having two goals ruled out by VAR for tight offsides.
Shakhtar midfielder Georgiy Sudakov stroked in a tidy finish from a counterattack in the 62nd minute to narrow the deficit, but Barcelona held on despite late pressure to secure their third win in three games.
“It was a hard-fought victory in a difficult match. It was hard for us. I’m happy for the win and for helping out with a goal,” man of the match Lopez told Movistar Plus.
“Xavi told us that winning today would be key to get closer to securing a place in the knock-outs. We suffered a bit but we got the three points”.
Barca are top on nine points, six ahead of Porto, who have a game in hand and later on Wednesday visit bottom side Antwerp, with the Belgians yet to earn a point. Shakhtar are in third place on three points.
Barcelona will host rivals Real Madrid in the first Clasico of the LaLiga season on Saturday.