Two goals from Izale McLeod and one from Wes Thomas gave Michael Appleton's side the three points despite Marvin Morgan's consolation.
Shrewsbury striker Paul Parry missed a glorious chance when he blazed Morgan's low cross over from four yards with the goal gaping. And Portsmouth opened the scoring after 55 minutes when McLeod played in Thomas who coolly rounded goalkeeper Chris Weale and slid home.
Three minutes later Brian Howard put McLeod through at an angle and he calmly chipped the onrushing Weale.
Shrewsbury pulled one back when Luke Summerfield's long-range drive was kept out by Mikkel Andersen but Morgan struck in the rebound. But Morgan became the villain moments later when he was sent off for what looked like dissent towards referee Fred Graham.
Former MK Dons forward McLeod wrapped up the win in the 90th minute when he fired home from a tight angle.