I prefer zsh.
The tab-completion alone is worth it:
- It expands wildcards if you want(handy when you want to delete all but one file in a directory)
- Will give you a list of switches after specifying a program
- Gives tab completion options below the line you're working on, which is pretty handy.
http://zsh.sourceforge.net/