I tried out zsh, but it had too many buggy display bits for my tastes. likely the stuff I was using in conjunction.
So I’ve stuck with bash and build a fairly solid config that works for the way I work.
A great book for learning bash is the O’Reily Learning the bash shell
FILES
/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
Individual readline initialization file
This is one of my favorites: ~~~~ if [[ $- == i ]] then bind ’“(https://bitbucket.org/ryan_barrett/dotfiles) forked from michaeljsmalley (His repos do not seem to exist any longer.)