Translation(s): English - Français - Italiano - Português (Brasil) - Русский - Español
A shell is a piece of software that provides an interface for users. Nowadays the term shell is mostly used for CommandLineInterface shells. In contrast, a graphical shell is a rarely-used term for a DesktopEnvironment.
Interactive shell
An interactive shell is used by a user in a virtual console or a TerminalEmulator.
Debian uses Bash as the default interactive shell for normal user accounts (those with a UID ⩾ 1000). The default shell assigned to new user accounts can be changed at any time by editing the file /etc/adduser.conf.
To change the interactive shell for the current user:
Check which shells are currently installed: cat /etc/shells
Set the user's new shell: chsh
Non-interactive Shell
A non-interactive shell is used to execute scripts. It is not intended to be used interactively by a user, for example, in a terminal emulator, but rather focuses on speed and compatibility with standards.
The default non-interactive shell on POSIX environments is an executable located on the filesystem at /bin/sh, which is a symbolic link to the default shell. Most system scripts use this, via the #!/bin/sh shebang. Changing a system's default non-interactive shell is simply a matter of changing that symbolic link to target a different executable.
In all releases up to and including DebianLenny, Bash was the default non-interactive shell. Beginning with DebianSqueeze, Debian uses Dash (the Debian Almquist shell) as the target of the /bin/sh symlink. Dash lacks many of the features one would expect in an interactive shell, which allows it to be faster and more memory efficient than Bash.
From DebianSqueeze to DebianBullseye, it was possible to select Bash as the target of the /bin/sh symlink by running dpkg-reconfigure dash. However, as of DebianBookworm, this is no longer supported.
Other shells
Debian provides many different shells. A few notable shells include:
Bash - A very powerful shell, with very good interactive interface.
Dash - A fast shell, compliant with Debian Policy § 10.4 and the Single UNIX Specification.
mksh - A fast Korn shell, similarly compliant with Debian Policy § 10.4 and the Single UNIX Specification as linked above; also contains mksh-static, which might be an even better /bin/sh choice.
zsh - Another powerful shell. (see the official documentation)
fish - Another friendly interactive shell.
tcsh - an enhanced version of Berkeley csh.
busybox - A Tiny shell, used in initrd and DebianInstaller.
csh and tcsh should be avoided as scripting languages; see "Why shouldn't I program in csh?" by Tom Christiansen, posted September 28, 1995. (archived at the Wayback Machine)
ash superseded by Dash in Debian since DebianSarge
ksh - The AT&T version of the Korn shell.
rc - implementation of the AT&T Plan 9 shell
rush - restricted user shell
See also
A comparison of command shells on English Wikipedia
The command-line shell article on Arch Wiki
"UNIX shell differences and how to change your shell" by Brian Blackmore, c. December 1998 (archived at the Wayback Machine)
CategoryCommandLineInterface | CategorySoftware | CategorySystemAdministration