Bash, Shell, Terminal, Console, etc, etc..

I was confused about these terms so I made a summary from various resources I found.

The Shell is a program which accepts your commands (ls, cd, etc) and processes them by running built-in functions (like cd) or calling external programs (like ls or gcc). There are a number of different shells to choose from but they all provide filename wildcarding, piping, here documents, command substitution, variables and control structures for condition-testing and iteration.

The original Unix shell was the Bourne shell, sh, written by Stephen Bourne at Bell Labs. Then came the C shell, written by Bill Joy at Berkeley, since updated as tcsh. Other shells include the Korn shell, ksh, written by David Korn, also at Bell Labs, and bash, the "Bourne again shell", written by Brian Fox for the GNU project as a free replacement for sh. is the filename of the default operating system shell for DOS operating systems and the default command line interpreter on Windows 95, Windows 98 and Windows ME. It has an additional role as the first program run after boot, hence being responsible for setting up the system by running the AUTOEXEC.BAT configuration file, and being the ancestor of all processes.

The shells are designed not merely for interactive use, but also for the interpretation of shell scripts, which are text files containing shell commands. For this purpose, each of the shells has the facilities typically associated with programming languages: variables, loop and conditional statements, I/O commands, and functions.

Different shells performs similar tasks, albeit with variations in syntax.

Terminal is the end of something - where it terminates. For example if you take the subway in some city, the station where you get down is your terminal.
A computer's purpose is to get data, do something with it, and spit out the result. The terminal is any device from where you can get the result of the computation.. a screen for example. It just happened that in the first computers you usually had the input (keyboard) and output (screen) as a single device. Because of that nowadays terminals are considered any input/output devices. A mouse, keyboard, screen, camera, they are all terminals.

A terminal was also originally hardware, used to communicate with a computer. Nowadays it usually refers to a window with a command line (shell), which might appear in a GUI window or instead of a GUI.

The terminal is the thing (almost always a program these days, but often a piece of hardware back in the bronze age) that manages your keystrokes and shows text to you---both the bits you type and the bits the shell or another program returns to you. When the terminal is a GUI program it draws the nice graphical window. In the old days it might have been little more than a fancy electric typewriter with fan-fold paper.

You can perform remote logins, using a program like ssh, from inside a terminal window. In this case, your shell (or whatever program you run remotely) is running on another computer, and the ssh program connects it to the local terminal emulator program running on your machine which handles graphics.