What is a "Shell" in a Computer?
A shell is a program or application that allows a user or other programs to access the core functions of an operating system contained in a subsystem called the "kernel" of the operating system. There are two ways this term is commonly used.
First, and mainly on Linux, shell is the name we give to a type of program that interprets terminal commands typed in a command line. Note that the shell is only the program that interprets the command line, it doesn't actually provide an interface for a human user. The terminal window is provided by a separate program called a terminal emulator, such as Konsole, GNOME Terminal, etc. Most Linux distributions ship with GNU's Bash as the default shell, and from this comes the term GNU/Linux: Linux as the kernel, and Bash as the shell. There are other shells, such as zsh, dash, ash, etc. Each shell could have a completely different syntax, but for convenience they tend to be mostly compatible. However, sometimes a feature only exists in one shell but not in the others, meaning that a command that one shell can interpret, the other won't understand, e.g. <(...) is works in bash (a feature called process substitution) but not in other shells. Simply executing a command in the command line tends to always work the same way no matter the shell. sh is an abbreviation for the default shell on a system, which will be bash most of the time. One notable exception is that some servers run BSD instead of Linux, and on BSD the default shell may not be bash. On Windows, this type of shell exists as well, but for the longest time it was just the Windows' command line. Nowadays we also have the PowerShell, which features a different syntax and more functionality.
By the way, on a command line, the text you can't edit that appears on the last line before the commands you type, such as John@Mint:~$ , is called the shell prompt.
Second, the term shell may refer to a graphical shell when we talk about graphical operating systems such as Windows. This is called a desktop environment on Linux, presumably because Linux isn't a graphical operating system (or even a complete operating system). The graphical shell would be the taskbar which lets you see what tasks the system is running and switch between them, and the start menu that lets you start new tasks. The important thing to understand is that to change these things on Linux, we would search for a different desktop environment such as KDE or Xfce, while on Windows we would search for an alternative "graphical shell." For an example of an alternative graphical shell, see [https://github.com/Open-Shell/Open-Shell-Menu] (accessed 2025-02-20).