Shields (5-7) worked around eight hits and walked two before giving way in the eighth to Kelvin Herrera, who allowed a home run to Conor Gillaspie that cut the Chicago deficit to 2-1.
The Royals then scored three times in the ninth to create some breathing room. Lorenzo Cain and Mike Moustakas both singled in a run and Kansas City scored another when Chicago left fielder Casper Wells misplayed a fly ball for an error.
David Lough delivered Kansas City's first run with a third-inning homer and Miguel Tejada had a sacrifice fly in the seventh.
The loss went to Jose Quintana (5-3), who gave up two runs on six hits in seven innings.
Gal Gadot cast as Wonder Woman for 'Batman vs. Superman'
Kate Middleton recycles dress at movie premiere