Shaun Whalley made the breakthrough just short of the hour – five minutes after having a penalty saved by Luke McGee – before substitute Stefan Payne added a late second.
Shrewsbury started brightly with Jon Nolan firing over from 20 yards before Alex Rodman cut inside and saw a shot headed clear by defender Matt Clarke.
Matt Kennedy was first to test Dean Henderson with a low drive from outside the penalty area which was pushed away by the home goalkeeper.
Portsmouth skipper Brett Pitman then fired over from 35 yards and Kennedy curled an effort wide.
Shrewsbury were awarded a penalty nine minutes into the second half when Carlton Morris was upended by McGee, with the Pompey goalkeeper saving Whalley’s spot-kick.
Whalley soon made amends with the opening goal five minutes later, drilling in the rebound after McGee pushed away a shot from Nolan.
Shrewsbury made sure of a ninth win in 11 home league this season nine minutes from time when they won the ball from the visitors and top scorer Payne broke into the box to score his 10th goal of the campaign.
Watford boss Javi Gracia does not think Abdoulaye Doucoure's form will be affected by his omission from France's latest squad.