Terminal vs Shell
TL;DR: Terminal is the "dumb" window frame that takes user input and shows result; Shell is the software that takes input from the Terminal, executes commands, and sends results back to the Terminal.
Terminal is "dumb": it is a text-based environment that takes input and shows text as output, the actual computing work is done at the other end in a mainframe, or by a SHELL in a modern computer.
Teletypewriter (TTY) was the first kind of terminal. It uses a typewriter to take your input, and automatically type out the responses. (without a screen!)
Later, a Terminal or a Console is referring to the physical device, which includes a screen and a keyboard.
Pseudo Terminals (PTY) are terminal emulators or software interfaces that emulate terminals. The "Terminal" we are talking in these days are most likely Pseudo Terminals.
Terminal.appis the default terminal on macOS.
iTerm2is a replacement for Terminal on macOS.
xtermis the standard terminal emulator of the X Window System.
- GNOME Terminal is the standard terminal emulator of the GNOME project.
Konsoleis the terminal emulator that ships with KDE.
GNU Screen: Terminal multiplexers.
PuTTY: for Windows.
A shell takes user input from the terminal, executes commands, talks to Kernel if needed, and sends output back to the terminal for display.
bash: the default Shell on most Linux and also on macOS
bashalternatives: zsh, ksh, etc
PowerShell: for Windows