Initially, the Unix OS used a shell program called the Bourne shell. Then, eventually, many more shell programs were developed for different flavors of Unix. The following is some brief information about different shells:
- sh—Bourne shell
 - csh—C shell
 - ksh—Korn shell
 - tcsh—enhanced C shell
 - bash—GNU Bourne Again shell
 - zsh—extension to bash, ksh, and tcsh
 - pdksh—extension to ksh
 
A brief comparison of various shells is presented in the following table:
| 
 Feature  | 
 Bourne  | 
 C  | 
 TC  | 
 Korn  | 
 Bash  | 
| 
 Aliases  | 
 no  | 
 yes  | 
 yes  | 
 yes  | 
 yes  | 
| 
 Command-line editing  | 
 no  | 
 no  | 
 yes  | 
 yes  | 
 yes  | 
| 
 Advanced pattern matching  | 
 no  | 
 no  | 
 no  | 
 yes  | 
 yes  | 
| 
 Filename completion  | 
 no  | 
 yes  | 
 yes  | 
 yes  | 
 yes  | 
| 
 Directory stacks (pushd and popd)  | 
 no  | 
 yes  | 
 yes  | 
 no  | 
 yes  | 
| 
 History  | 
 no  | 
 yes  | 
 yes  | 
 yes  | 
 yes  | 
| 
 Functions  | 
 yes  | 
 no  | 
 no  | 
 Yes  | 
 yes  | 
| 
 Key binding  | 
 no  | 
 no  | 
 yes  | 
 no  | 
 yes  | 
| 
 Job control  | 
 no  | 
 yes  | 
 yes  | 
 yes  | 
 yes  | 
| 
 Spelling correction  | 
 no  | 
 no  | 
 yes  | 
 no  | 
 yes  | 
| 
 Prompt formatting  | 
 no  | 
 no  | 
 yes  | 
 no  | 
 yes  | 
What we see here is that, generally, the syntax of all these shells is 95% similar.
In this book, we are going to follow Bash shell programming.