There are automation tools that are much better suited for that then pure shell. Kickstart for anaconda based installers, preseed for debian installer etc. Or configuration management tools.
Kickstart and preseed do not require installing anything. These are features of distro installers. Such configuration management tools as ansible also do nat require installing agent on a target machine (only python is needed, but it is usually installed by default).
Yeah but this script works on all distros and operating systems regardless of whether they have Kickstart. Also lots of OS's don't ship with Python, Void Linux for example.
This script won't work in any distro, you have to use a lot of distro specific commands in it. But if you write a script for a specific distro anyway, why not use a tool that distro provides? You'll be sure that it does everything correct way and you even won't need to run anything after installation completed. You can also save time and disk space by excluding packages you don't need but that would be installed by default. You can also automate disk partitioning and customize other installer settings saving even more time.
Speaking about configuration management tools, they can look a bit overkill, but they have at least one advantage of shell script - idempotency. They won't try to install already installed software, change configs that don't need to be changed etc.