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.
Rangers manager Steven Gerrard is weighing up a move for Liverpool full-back Jon Flanagan, reports claim.
Scottish champions Celtic are reportedly ready to offer full-back Calvin Miller a new deal before sending him out on loan.
Everton target Jack Wilshere has sparked a scramble for his signature after confirming he is leaving Arsenal this summer.
Tottenham's hopes of landing Wilfried Zaha have been hit by the news Crystal Palace have offered him a bumper new deal to stay.
Ryan Giggs says Gareth Bale would be the perfect fit for Manchester United but has doubts over whether he will leave Real Madrid.
Manchester City's attempts to sign Riyad Mahrez could be in doubt again as reports claim Leicester only want a straight cash deal.