Most of the action took place in the second half, with Jack Whatmough – making his 100th appearance for the club – among those to go close.
And both sides came close to snatching a late winner, as Rekeil Pyke was denied by Craig MacGillivray, while Tom Naylor’s header struck the woodwork.
But the visitors had to play the final few seconds with just 10 men after Aaron Pierre was dismissed for a second bookable offence.
Kenny Jackett made one change from the side that beat Colchester in the EFL Trophy earlier in the week.
That came at left-back, where summer loan signing Cam Pring dropped to the bench to make way for Lee Brown.
It did not take long for Jason Cummings to collect an early booking following a late challenge on Marquis.
And Bryn Morris then came close to haunting his former club with a fierce drive that was parried by Matija Sarkick.
The ball ran loose and John Marquis desperately tried to get there first, but the keeper was able to smother it.
But it was, generally, a laboured start from the hosts and Shrewsbury almost made them pay from a corner on 12 minutes.
The ball was headed against the post by Brad Walker and, with the goal gaping, Ethan Ebanks-Landell then nodded it wide.
There was controversy when Marquis collected a Ronan Curtis pass and was fouled outside the box by Pierre.
The Blues striker felt he was last man and it should have warranted a red card, but referee Charles Breakspear opted to brandish only a yellow.
Several players were hovering over the free-kick and when Brown eventually took it, he curled the ball inches past the post.
There were half-chances at both ends of the pitch, although it had certainly not been the most entertaining period of football.
Shrewsbury Town 0
Marquis came close to breaking the deadlock soon after the restart, trying an inventive lofted effort from the right side of the box that drifted narrowly wide.
And their opponents then went close at the other end, as Brad Walker danced past a number of challenges, only to screw his shot horribly off target.
Jackett made his first change 10 minutes into the second half, with Andy Cannon on to replace Gareth Evans.
Both sides were looking to counter with pace and one such attack led to Marquis having a header deflected over the bar.
Clear-cut chances were still proving to be few and far between, though, and it took an unlikely source to find the next shot on target.
A Curtis free-kick was nodded back into the centre by Sean Raggett and Whatmough’s volley was saved by Sarkic.
Ryan Williams came on for Marcus Harness on 69 minutes, as Jackett decided to freshen up his forward options.
And when the newcomer was hacked down by Josh Vela, Breakspear played the advantage and Pompey broke.
Cannon timed his run to stay onside and collect Curtis’ pass, but could not get the ball on his right foot and the move broke down.
Vela was then shown a booking and so was substitute Marlon Fossey for a foul on Curtis down the left.
Brown was the one to take it and tried to send the ball over Sarkic, with the keeper back-pedalling to just about prevent it finding the net.
Pompey were well on top now and Scott Golbourne was well-placed just in front of the line to block Raggett’s header.
Then, after Ben Close had replaced Morris, the left-back also managed to divert Williams’ goal-bound header to safety.
But it was Shrewsbury who almost grabbed a late winner from a corner, with MacGillivray – who had experienced a quiet afternoon – making a stunning save to deny Pyke.
The ball was still loose and the danger was not over, however, with Whatmough managing to hack from the line.
Pompey then almost secured all three points for themselves, with Naylor meeting another fine Brown free-kick and rattling the crossbar with his header.
Pierre was sent off late in stoppage-time, picking up a second booking for a clear foul on Marquis 20 yards out.
It meant that Brown had the final chance to secure victory, sending his low free-kick through the wall and seeing Sarkic turn it around the post.
Pompey (4-2-3-1): MacGillivray; Johnson, Whatmough, Raggett, Brown; Naylor (c), Morris (Close 80); Harness (Williams 69), Evans (Cannon 55), Curtis; Marquis
Booked: Harness, Morris
Subs not used: Turnbull, Bolton, Pring, Harrison
Shrewsbury (4-3-3): Sarkic; Williams (Fossey 72), Pierre, Ebanks-Landell (c), Golbourne; Vela (Norburn 78), Walker, High; Cummings (Barnett 84), Pyke, Whalley
Sent off: Pierre (two yellow cards)
Booked: Cummings, Whalley, Vela, Fossey
Subs not used: Burgoyne, Love, Daniels, Udoh
Referee: Charles Breakspear