Question: I know about Linux terminal. I can also issue many advanced commands over terminal. But one simple concept is not clear to me.

What is terminal and how does it work?

I know about hardware which consists of CPU, RAM, HARD DISK and so on.

I know about kernel which is basically the core of the operating system.

I know about software which sits on the top of kernel.

And I know about users.

And I know that user uses either terminal or GUI to give instructions to the software.(or kernel?)

Now please explain these concepts of terminal and shell.

**Graphical explanation and simple non-technical words are preferable.**

Answer: 
**What is shell?**

In simple words, shell is a software which takes the command from your keyboard and passes it to the OS.

**So are konsole, xterm or gnome-terminals shells?**

No, they're called terminal emulators. They open a GUI to interact with the shell. You can think of them as a **frontend** to the shells.

[![shell reference](https://i.stack.imgur.com/hKEfU.png)](https://i.stack.imgur.com/hKEfU.png)

**Different Shells**

There are different shells which are more or less same but the features and syntaxes are different.

**Bourne shell** The most basic shell available on all UNIX systems

**Korn Shell** Based on the Bourne shell with enhancements

**C Shell** Similar to the C programming language in syntax

**Bash Shell** Bourne Again Shell combines the advantages of the Korn Shell and the C Shell. The default on most Linux distributions.

**tcsh** Similar to the C Shell
The shell is the program that runs in the terminal, that reads the commands you type and executes them.

Unix and Unix-like operating systems today offer a choice between mostly the same set of shells, because these shells pre-date most of those operating systems.

For further reading I recommend [Evolution of shells in Linux (IBM)](http://www.ibm.com/developerworks/library/l-linux-shells/)

Edit to add information regarding shells and terminals following comments on another answer:

A [terminal](https://en.wikipedia.org/wiki/Computer_terminal#/media/File:DEC_VT100_terminal.jpg) is a hardware peripheral that interfaces with a human, it is composed of output to the user and input from the user, in other words of a screen and a keyboard, see link. What the GUI shows you is a *virtual* terminal. The shell is the command-line interface software that is usually what you see on a terminal, but it doesn't have to be a shell. You could start up a virtual terminal and tell it to run `vi` directly, for example, no shell involved.