The Swiss led Group E at the start of the day and needed just one point to qualify while Albania had to win to revive their slim hopes of topping the table.
Valentin Stocker headed against the post in the 19th minute and the hosts went close again when Granit Xhaka wasted a good chance after good work by Shaqiri.
A ball from Xhaka set Shaqiri free inside the area and he opened the scoring in the 47th minute.
Just as it looked as though the home team were getting on top, Lang controlled the ball on his chest before firing Switzerland's second goal with 13 minutes to go.
Salihi pulled one back for Austria with an 88th-minute penalty after keeper Diego Benaglio brought down midfielder Roshi.