You forgot all the C shells, csh and tcsh.
There are a lot of shells because a lot of people decided that it would be cool to write a shell
. Sh is the original Bourne shell (these days on Linux it's usually just linked to bash, which is an improved Bourne shell). Bash, ksh, pdksh, and others are improved versions of that shell featuring better command line editing, more features for scripting, or both.
Unless you're going to be doing heavy duty shell scripting, the shell you use doesn't really matter that much. I stick with Bash since I know it reasonably well. If you use a BSD Unix system you will often be assigned tcsh (BSD systems generally have a C shell as the default), but you can change this. I'm told the C shells are terrible for scripting, and looking at some scripts, I can sort of see this.