There were not an abundance of chances in the first half, but the Blues got the job done after the break.
Ellis Harrison headed them into the lead and John Marquis came off the bench to wrap up all three points.
Kenny Jackett made three changes from the side that were narrowly beaten at Coventry earlier in the week.
Gareth Evans came in for his first league appearance since New Year’s Day, while there were also starts for Marcus Harness and Harrison.
Ben Close, Ryan Williams and Marquis were the men to make way, with the trio all named among the substitutes.
Storm Dennis ensured the ground was being battered by strong winds and heavy rain, making conditions tough for both sides.
But Pompey made the brighter start and sent plenty of early deliveries into the box for the Shrews to deal with.
Harness then dug out a low shot that Max O’Leary in the Milton End goal had to get down to keep out.
The keeper also beat away a fierce effort from Steve Seddon after the ball landed for the left-back inside the box.
There was not much happening at the other end, although Christian Burgess and Tom Naylor bravely threw themselves in front of shots.
The visitors then saw two of their three-man back-line booked in quick succession, with Ro-Shaun Williams and Ethan Ebanks-Landell punished for fouls on Ronan Curtis and Harrison respectively.
It went a bit quiet as the half progressed, although there was a good chance for the hosts on 30 minutes.
Curtis’ pass released Harness down the right and his low delivery was turned over by a stretching Harrison.
Shrewsbury’s only decent opportunity followed soon after, with Bass equal to a curling Conor McAleny effort.
It was the Blues who were on top as the interval approached, although Evans will want to forget an ambitious bicycle kick that saw him miss the ball completely.
Seddon provided more of a threat after being given space to advance in stoppage-time, before hitting a rocket that dipped narrowly over the bar.
Shrewsbury Town 0
Pompey looked a bit rusty immediately after the restart and Burgess was booked for a foul on Daniel Udoh.
Sean Goss stepped up to take the free-kick and curled the ball into the side netting from 20 yards out.
And the visitors then had a couple of decent chances inside a minute, with Bass getting his fingertips to a cross-cum-shot from substitute Kayne Ramsay.
When the ball broke for Conor McAleny moments later, his fierce effort flew through a sea of bodies and was beaten to safety by Bass.
Jackett made a double switch soon after, with Evans and James Bolton withdrawn for Marquis and Ross McCrorie.
The former soon had an effort that took a deflection and the ball would not quite bounce kindly for Harrison.
But the latter then provided the assist, as the hosts were finally able to break the deadlock on 64 minutes.
It was a superb cross from McCrorie, who took a touch before sending the ball into the box for HARRISON to nod home from close range.
They soon had a chance to double the lead when Cameron McGeehan was brought down just outside the box.
But after Seddon dummied it, Curtis sent the free-kick thudding in the wall and skipper Naylor fired the loose ball wide.
Pompey were trying to add to their lead and O’Leary was quickly off his line to deny Marquis after Curtis had slipped a neat pass through to the striker.
Sean Raggett was then unable to beat the keeper from a Curtis free-kick, as the hosts continued to push.
Harness was next to go close when McCrorie cut the ball back for him, but again O’Leary came to Town’s rescue.
But the points were finally secured on 82 minutes, as MARQUIS collected a pass from Harness and coolly slotted the ball into the net.
Williams replaced Curtis for the closing stages, as Pompey saw the contest out with relative ease to ensure they remained in the top six.
Pompey (4-2-3-1): Bass; Bolton (McCrorie 58), Burgess, Raggett, Seddon; McGeehan, Naylor (c); Harness, Evans (Marquis 58), Curtis (Williams 89); Harrison
Goals: Harrison 64, Marquis 82
Subs not used: MacGillivray, Whatmough, Brown, Close
Shrewsbury (3-5-1-1): O’Leary; Williams, Ebanks-Landell, Pierre; Beckles, Edwards (c), Goss, Laurent, Hart (Ramsay 46); McAleny (Cummings 67); Udoh (Lang 67)
Booked: Williams, Ebanks-Landell, Lang, Goss
Subs not used: Burgoyne, Love, Sears, Golbourne
Referee: Lee Swabey
Attendance: 18,214 (319 away fans)