A terminal is a text input and output environment. A terminal window, also known as a terminal emulator, is a text-only window that emulates a console in a graphical user interface (GUI).
A shell is a program that processes commands and outputs the results. A shell is a layer that sits on top of the kernel.