On Linux and Unix-like systems, users have a lot of options of shells to use. Although they all serve the same rough purpose of processessing and executing command lines supplied by the user, each shell implementation is different and typically caters to a certain need.
Some shells have customizable themes and features such as completion, history, spell checking, and integration with tools such as git to make them nice for day to day use. Some examples include but are not limited to bash, zsh, and fish.
Some such as bash-static may be statically-linked or stripped down to not include additional libraries in order to be useful in a system recovery setting.
Linux Distributions may default to different shells. Usually they use bash though.
Some shells such as rsh or rbash may be restricted to only be able to run certain commands for security purposes. Vendors often write their own custom restricted shells to interact with proprietary hardware.
Most shells with the exclusion of restricted shells are extensible by nature. Shells are designed to interpret commands and run scripts.
If different shell software is available on a system, the users may be able to change their default shell using the chsh or chfn commands.
A list of installed and authorized shells is usually found at /etc/shells