James Bolton was left in space to score the only goal of the game midway through a first half that failed to sparkle.
But there was plenty of controversy before the break, with two decent shouts for a penalty turned down.
The Blues looked more inventive following the interval, but keeper Craig MacGillivray and the woodwork came to the Shrews’ rescue.
Adam May’s late dismissal for a second bookable offence only served to compound the hosts’ misery.
Kenny Jackett made three changes from the side that suffered a dramatic defeat at Rotherham the previous week.
Gareth Evans returned from injury to skipper the side, while there were also recalls for May and Oli Hawkins.
Regular captain Brett Pitman dropped to the bench, along with Sylvain Deslandes and Matty Kennedy.
Pompey were guilty of some sloppy play before the break, although the wet conditions were undoubtedly making life tough for both sides.
But they dominated possession throughout the first half and Hawkins could not quite connect with Evans’ cross after leaping in the box.
May then received the game’s first booking for a late challenge on Shaun Whalley as the contest continued to meander.
And the goal that gave Shrewsbury the lead was indicative of what had come before, as the Blues failed to deal with a corner and Bolton took advantage at the far post.
There might have been a second when Luke McGee lost out in a race for the ball with Abu Ogogo, but Ben Close was on hand to clear the danger.
But the hosts were soon back on the attack and when Close’s free-kick was only partially cleared, Donohue’s follow-up volley was deflected wide.
Pompey were even closer to a leveller on 31 minutes, as Hawkins met Evans’ delivery, only for MacGillivray to make a superb save.
There was controversy either side of that, however, as the hosts were controversially denied a penalty on two occasions.
Referee David Coote had a clear view of Christian Burgess’ shirt being tugged as he tried to attack a corner, but opted to do nothing.
The official then failed to spot Whalley’s handball in the box, much to the fury of the home side, who rushed to complain, earning Evans a booking.
The Blues had to put that to the back of their minds and Hawkins almost capitalised when the Shrews defence failed to deal with May’s pass.
Evans also had a shot blocked by Omar Beckles and another effort that went over, as the hosts went in behind at the break.
Shrewsbury Town 1
Former Fratton favourite Ricardo Rocha – who made almost 100 appearances for the club – was introduced to the crowd during the interval.
That provided a lift, but the supporters were soon up in arms again when Coote missed another handball, although at least this one was not in the box.
Pompey were still struggling to find any fluidity and Jackett soon made a switch, replacing Jamal Lowe with Pitman.
That certainly provided the required spark, as the hosts soon began to take control and had a series of chances to draw level.
Toto Nsiala was well-placed in the box to keep out Evans’ shot and when the skipper delivered the ball back into the box, Pitman’s guided header was saved by MacGillivray.
Matt Clarke then saw an opening from the resulting corner, but could not force the ball through a sea of orange shirts.
And MacGillivray came to Shrewsbury’s rescue once again when he dived to his right to expertly keep out Kal Naismith’s 30-yard drive.
But the chances began to dry up again and so Naismith was withdrawn on 70 minutes for the fresh legs of Connor Ronan.
It was not all one-way traffic, though, and McGee managed to claw away Carlton Morris’ header at point-blank range.
Whalley then arrowed an angled drive narrowly past the post after Shrewsbury had countered quickly.
Time was rapidly running out for the hosts, but they almost found an equaliser on 84 minutes.
Ronan’s looping header was volleyed towards goal by Pitman and a deflection took the ball onto the crossbar.
And there was more controversy late on when the ball bounced up and hit the arm of Beckles, only for Coote to remain unmoved.
But there was still time for the afternoon to get even worse for the hosts, as May’s foul on Stefan Payne saw him receive a second yellow card and subsequent red.
Pitman almost rescued an unlikely point deep into stoppage-time, however, with an angled shot rolling agonisingly past the post.
Pompey (4-2-3-1): McGee; Thompson, Burgess, Clarke, Donohue; May, Close; Evans (c), Naismith (Ronan 70), Lowe (Pitman 55); Hawkins
Sent off: May (two yellow cards)
Booked: Evans, Donohue
Subs not used: Bass, Deslandes, Bennett, Kennedy, Chaplin
Shrewsbury (4-1-4-1): MacGillivray; Bolton, Nsiala, Sadler, Beckles; Godfrey; Whalley (John-Lewis 90+2), Nolan, Ogogo (c), Rodman; C.Morris (Payne 83)
Goals: Bolton 21
Booked: C.Morris, Rodman, Payne
Subs not used: Rowley, Hendrie, Lowe, B.Morris, Gnahoua
Referee: David Coote
Attendance: 17,779 (498 away fans)