Bash/POSIX shell. It's necessary because it's the standard, and you can't expect computers to have a better shell by default. It's good enough for simple things that scripts for it grow complex enough to warrant something better. It's only bearable because it's familiar after years of experience.
It's terrible because it does everything to make it hard to write scripts. Three syntaxes for using variables, and only one will not cause breakage. Stringly typed. Killer spaces when looping. Arcane syntax for conditionals, where despite 10 years of coding I can't write a simple if/else without looking at references.
And it's widespread enough that it won't die.