I am not the most experienced by any means, but wouldn't it be better to run it with a ";" in the spot off all of the "&" so that way if one of the commands fail it doesn't stop mid script?
I think you're thinking of &&. Using a single & will run the task in the background and immediately spawn the next. Using semicolons would execute them in order.
Essentially, this is starting a whole bunch of installers all at the same time.