1,shall的过去式是should,should主要用作情态动词,表命令.所以当你用shall表示按法规,命令,允诺的时候,你可以用它的过去式should.如You should wash your hands before meals 你在饭前应该洗手.
2,这是伴随性状语从句,主要有被动语态和ing进行时两种.Punished是punish的过去分词,表示被动,Having punished是个错句,have是完成时的助词,后面的punish表主动,但是这句话的punish后面没有接名词,所以明显是错误的.就算想用完成时表被动,也应该是having been punished,用be punished这个被动式的完成时.