Marvin Morgan hit the only goal of the game as Shrewsbury served up Coventry's first defeat in almost two months.
After Joe Murphy had superbly denied Matt Richards' header, Morgan netted the close-range rebound on 63 minutes to stretch improving Town's recent run to just one defeat in nine games.
New Coventry signing Leon Clarke wasted a chance to score with his first touch as a second-half substitute.
But the visitors somehow hung on to complete a double over the Sky Blues.
Clarke was again denied by Matt Richards' goalline clearance before an incredible late double save from Town keeper Chris Weale thwarted both Gary McSheffrey, who had earlier hit the bar from 25 yards, and Clarke again.
The Sky Blues' 18-goal top scorer David McGoldrick, who returned after suspension, drew a blank in his final game on loan from Nottingham Forest.
Coventry's first defeat in 10 matches slips them down to 11th in League One, while Shrewsbury's first away win of the campaign helps them climb a place to 18th - now seven points clear of trouble.
VIEW FROM THE DRESSING ROOM
Sky Blues boss Mark Robins told BBC Coventry and Warwickshire:
"We were nearly-men today. Whilst we're disappointed, we mustn't over-react. We've created a lot of chances and not taken any of them. It's as simple as that.
"We should have at least had two or three goals. We could easily have got five. We didn't, and we conceded a poor one. We didn't shut it out at the other end. That was the disappointment for me.
"There wasn't the urgency or tempo. We've done brilliantly and we've been on a good run. That run has come to an end now, which isn't the way we wanted to start the new year but we can't make too much of it. We've got to dust ourselves off and get on with the easy trip to Tottenham next weekend."