Shields (6-18) allowed one run and seven hits, using six strikeouts to help wriggle out of several jams and help Chicago win its third straight.
The right-hander hadn't won since July 26, when he pitched scoreless ball into the eighth against the crosstown Cubs. Shields was 0-6 in his previous 10 starts and is 4-11 since a trade to Chicago from San Diego.
Morneau and Omar Narvaez each had two hits. Jose Abreu had two hits and an RBI.
Tampa Bay's Drew Smyly (7-12) allowed three runs and seven hits over five innings in losing for the first time since July 18 at Colorado.