Shaw played midget hockey within his native Nova Scotia with the Cape Breton Tradesmen before joining the major junior ranks with the Cape Breton Screaming Eagles of the Quebec Major Junior Hockey League, after he was selected 12th overall in the 2008 QMJHL Entry Draft. After his selection by the Florida Panthers in the 2011 NHL Entry Draft, Shaw remained in the QMJHL with the Screaming Eagles before he was traded during the 2011–12 season to the Quebec Remparts on January 7, 2012. On April 22, 2013, Shaw was signed by the Florida Panthers to a three-year entry-level contract. Shaw was assigned to begin his professional career with AHL affiliate, the San Antonio Rampage, in the 2013–14 season. In the 2015–16 season, after five games with new minor league affiliate, the Portland Pirates, Shaw received his first NHL recall to the Panthers on October 29, 2015. He later made his NHL debut with the Panthers in a 3–1 defeat to the Boston Bruins on October 30, 2015. Shaw completed his first NHL season with the Panthers, contributing with 5 goals in 53 games before featuring in 3 post-season games in a first-round defeat. In the 2016–17 season, Shaw was unable to retain his role with the Panthers and was reassigned to inaugural AHL affiliate, the Springfield Thunderbirds. He scored 4 goals in 13 games with the Thunderbirds before he was traded by the Panthers to the Anaheim Ducks in exchange for Michael Sgarbossa on November 16, 2016. During the 2017–18 season, after the Ducks picked up J.T. Brown off waivers from the Tampa Bay Lightning, Shaw was placed on waivers having appeared in 42 games for 8 points, and was then claimed by the Montreal Canadiens on January 15, 2018. Shaw was inserted into the Canadiens lineup and played out the remainder of the season, appearing in 30 games for 2 goals and 6 points. As an impending restricted free agent, Shaw was not tendered a qualifying offer from the Canadiens and was released to free agency on June 25, 2018. Un-signed over the summer, Shaw accepted an invitation and attended the Calgary Flames 2018 training camp. Following his release from the Flames AHL affiliate, the Stockton Heat training camp, Shaw returned within the Ducks organization, signing a professional try-out contract with the San Diego Gulls on October 3, 2018. He secured a standard playing contract to remain with the Gulls for the season a week later on October 10, 2018. On November 11, 2018, Shaw left the Gulls to sign a one-year, two-way contract with the Winnipeg Jets. He did not appear in a game with the Jets, but rather spent the remainder of the season with the Manitoba Moose. In 63 games, Shaw led the Moose with 27 goals and finished second in scoring with 46 points. On May 31, 2019, the Jets re-signed Shaw to a one-year, two-way contract extension worth $700,000.