Linux Tactic

Sh and Bash: An Overview of Unix Shells

Introduction to Sh and Bash

In the world of computing, a shell is a program that enables users to interact with an operating system utilizing a command-line interface. The shell interprets user input, executes commands, and produces output.

Sh and Bash are two popular Unix shells that are commonly used both in Linux and other Unix-based operating systems. This article will provide a comprehensive overview of Sh and Bash, including an introduction of what a shell is, how the Bourne shell came to be, where to find the sh binary, and the sh shell as a programming language.

What is a shell and its functionality? A shell is a program that takes input from the user and executes commands on the operating system.

From a user’s perspective, the shell represents a command-line interface where users can enter text commands and interact with the operating system. The shell interprets the commands entered and translates them into instructions that the operating system can understand.

The shell also provides an environment for running programs, managing input and output, and handling errors. For example, in Linux, the terminal is the shell program.

When you open the terminal, you can enter text commands such as “date” and press the enter key. The shell will interpret the command “date” and return the current date and time on the system.

The Bourne Shell (sh)

The history and development of the Bourne shell

Stephen Bourne, a computer scientist at Bell Labs, created the Bourne shell in 1977, which was released as part of the Unix operating system. Bourne’s goal was to create a more powerful and flexible shell than its predecessors, while also adhering to the basic principles of the Unix environment.

The Bourne shell was the first shell to introduce the concept of the shell as a programming language, allowing users to write scripts in the sh language. The sh language is a subset of the C programming language and provides users with the ability to automate tasks and write more complex scripts.

Location of binary and availability on Linux systems

The sh binary is located in the /bin directory on most Unix-based operating systems, including Linux. The binary is available on most Linux systems, and users can access the shell by typing “sh” in the terminal.

The sh shell as a programming language

The sh shell follows the POSIX (Portable Operating System Interface) standard, providing a set of rules for how a Unix system should operate. This standard ensures that code written for one system will also work on another system that adheres to the same standard.

The sh shell offers a variety of features that make it a powerful and versatile programming language. It provides support for variables, loops, branching, and functions, enabling users to write complex scripts and automate tasks.


In conclusion, Sh and Bash are two of the most popular Unix shells, both offering powerful functionality and ease of use. The Bourne shell, as a predecessor to Bash, introduced the concept of the shell as a programming language.

The sh binary is located in the /bin directory on most Unix-based operating systems, including Linux. The sh shell follows the POSIX standard, making it a versatile and widely used shell language.

With these shells, users can perform a multitude of tasks from the command line, from accessing files, to performing network operations and automating repetitive tasks.

The Bourne Again Shell (Bash)

Bash is a Unix shell developed by Brian Fox for the GNU Project. It was released in 1989 and was designed to be a replacement for the Bourne shell (sh), providing users with an extended set of features and improved functionality.

In this section, we will take a closer look at the history and development of Bash, as well as the differences between Bash and sh.

History and development of Bash

As mentioned earlier, Bash was created as a part of the GNU project. Fox developed it while working at the Free Software Foundation and released the first version of Bash, version 1.0, in 1989.

The goal of Bash was to combine the best features of sh and the C shell (csh) into a single shell. In doing so, Bash aimed to offer users more flexibility, improved performance, and an expanded feature set.

In 1993, Bash 2.0 was released, adding several new features such as command-line editing and the ability to define shell variables with the export command. Over the years, Bash continued to evolve, with new versions bringing additional features and capabilities.

The current stable release of Bash is version 5.1, released in September 2020.

Bash as a superset of sh

One of the most significant features of Bash is that it is a superset of sh, meaning that it includes all of the features of sh plus additional functionalities. Sh is a POSIX-compliant shell, meaning that it follows the POSIX Shell and Tools standard.

Bash is also POSIX-compliant but contains additional functionalities and features that sh does not. For example, Bash includes more efficient command-line editing capabilities, more flexible scripting features, and improved command-line completion.

Differences between sh and Bash

Although Bash is a superset of sh, there are still several differences between the two shells that are worth noting. Let’s take a closer look at some of these differences.

Default shell and binary location:

By default, many Unix-based operating systems, including Linux, use Bash as the default shell. This means that when you open a terminal window, the shell that you are using is likely to be Bash.

In contrast, the sh shell is usually not the default shell, but it is usually available on most, if not all, Unix-based operating systems. The binary for sh is usually located in the /bin directory, while the binary for Bash is usually located in the /usr/bin directory.


Bash includes additional features that are not available in sh. For example, Bash provides improved command-line editing capabilities, which allows users to edit and reuse previously entered commands more efficiently.

Additionally, Bash provides more advanced scripting features, which are particularly useful for automating repetitive tasks or for creating custom scripts. POSIX compliance:

As mentioned earlier, both sh and Bash are POSIX-compliant shells.

However, Bash includes additional functionalities and features that are not required by the POSIX specification. This may make Bash more convenient to work with in some cases, but it can also make Bash scripts less portable, meaning that scripts written in Bash may not work correctly on shell environments that do not implement those features.

Ease of use:

Bash is considered to be more user-friendly than sh by many users. This is primarily due to the enhanced command-line editing capabilities and the more advanced scripting features that Bash provides.

These features help to make Bash a more accessible and intuitive shell. Scripting:

While both shells are capable of running scripts, Bash offers more advanced scripting capabilities than sh.

Bash scripts feature more powerful control structures, allowing the creation of more complex scripts.


In conclusion, Bash was developed as a superset of sh and provides users with an expanded set of features and improved functionality. While Bash and sh are both POSIX-compliant shells, Bash includes additional features that enhance its ease of use and scripting capabilities.

However, users should be aware that these additional features may make Bash scripts less portable to non-Bash shell environments. In contrast, sh is a more minimalistic shell that follows the POSIX specification more closely, with its simplicity being beneficial for shell scripting on limited-resource computers.

Overall, both sh and Bash are valuable tools for computing, each with their own strengths and weaknesses. In summary, Sh and Bash are powerful Unix shells that offer users a command-line interface to interact with the operating system.

The Bourne shell (sh) and the Bourne Again Shell (Bash) were designed to meet different needs and preferences. While sh provides a minimalistic shell that follows the POSIX standard more strictly, Bash offers a superset of sh, with additional features and improved functionality.

Ultimately, both shells have their advantages and disadvantages, and users can choose which one best meets their needs depending on the task at hand. The importance of versatility and the ability to automate tasks cannot be overstated in the world of computing, and both shells provide powerful tools to complete such tasks with ease.

Popular Posts