Introducing the Shell
Last updated on 2026-03-30 | Edit this page
Overview
Questions
- What is a command shell and why would I use one?
Objectives
- Explain how the shell relates to the keyboard, the screen, the operating system, and users’ programs.
- Explain when and why command-line interfaces should be used instead of graphical interfaces.
What is the Shell?
Some vocabulary:
- GUI: Graphical User Interface, the most common way to use computers nowadays
- CLI: Command Line Interface, old fashioned
Humans and computers commonly interact in many different ways, such as through a keyboard and mouse, touch screen interfaces, or using speech recognition systems. The most widely used way to interact with personal computers is called a graphical user interface (GUI). With a GUI, we give instructions by clicking a mouse and using menu-driven interactions.
While the visual aid of a GUI makes it intuitive to learn, this way of interacting scales very poorly for some tasks.
A command-line interface (CLI) allows users to interact with a computer by reading and writing text. It excels at making repetitive tasks automatic and fast.
A shell is a particular program that lets you type commands. In this workshop, we will be using “Bash” which is the most popular Unix shell. Bash is often the default shell on Unix and in Unix-like tools for Windows.
Why use the shell?
CLIs are harder to learn than GUIs, but:
- best supported way to interact with HPC (and this might be why most of you are here today).
- smooth transition between experimentation and automation: write commands interactively and then compose them into a script (great for reproducibility) (see REPL)
- can be more productive once learned
Imagine the following task: for a literature search, you have to copy the third line of one thousand text files in one thousand different directories and paste it into a single file.
Using a GUI, you would not only be clicking at your desk for several hours, but you could potentially also commit an error in the process of completing this repetitive task.
Using a CLI, you can write a series of commands that does this consistently and nearly instantly.
The shell can be used for simple tasks like creating an empty folder and for launching (even complex) programs with a single command. In fact, some tools and resources such as cloud computing systems usually require users to be familiar with the shell. Shell commands can be combined together and saved into reproducible scripts that automate repetitive tasks.
Using the shell will take some effort and some time to learn. While a GUI presents you with choices to select, CLI choices are not automatically presented to you. It can be daunting at first, but once you’ve come familiar with this different style of interacting, you will be able to efficiently accomplish a huge variety of tasks.
Let’s get started.
When the shell is first opened, you are presented with a prompt, indicating that the shell is waiting for input.
- the command prompt may look in many ways, showing
various information. We’ll (try to) show it always as
$, which is the “worst” case (least amount of information). - You can type commands after the command prompt.
- when copying and pasting, be careful not copy the command prompt.
The shell typically uses $ as the prompt, but may use a
different symbol. In the examples for this lesson, we’ll show the prompt
as $. Most importantly, do not type the prompt
when typing commands. Only type the command that follows the prompt.
This rule applies both in these lessons and in lessons from other
sources. Also note that after you type a command, you have to press the
Enter key to execute it.
The prompt is followed by a text cursor, a character that indicates the position where your typing will appear. The cursor is usually a flashing or solid block, but it can also be an underscore or a pipe. You may have seen it in a text editor program, for example.
Note that your prompt might look a little different. In particular,
most popular shell environments by default put your user name and the
host name before the $. Such a prompt might look like,
e.g.:
The prompt might even include more than this. Do not worry if your
prompt is not just a short $. This lesson does not depend
on this additional information and it should also not get in your way.
The only important item to focus on is the $ character
itself and we will see later why.
Our first command
So let’s try our first command, ls, which is short for
listing. This command will list the contents of the current
directory:
OUTPUT
Desktop Downloads Movies Pictures
Documents Library Music Public
Nelle’s Pipeline: A Typical Problem (fictional)
Nelle Nemo, a marine biologist, has just returned from a six-month
survey of the North Pacific
Gyre, where she has been sampling gelatinous marine life in the Great
Pacific Garbage Patch. She has many samples that
she’s run through an assay machine to measure the relative abundance of
300 proteins. She needs to run these many files through
an imaginary program called goostats.sh. In addition to
this huge task, she has to write up results by the end of the month into
a paper.
If Nelle had to run goostats.sh by hand using a GUI,
she’ll have to select and open a file many times. If
goostats.sh takes 30 seconds to run each file, the whole
process will take more than 12 hours of Nelle’s attention. With the
shell, Nelle can instead assign her computer this mundane task while she
focuses her attention on writing her paper.
The next few lessons will explore the ways Nelle can achieve this.
More specifically, the lessons explain how she can use a command shell
to run the goostats.sh program, using loops to automate the
repetitive steps of entering file names, so that her computer can work
while she writes her paper.
As a bonus, once she has put a processing pipeline together, she will be able to use it again whenever she collects more data.
In order to achieve her task, Nelle needs to know how to:
- navigate to a file/directory
- create a file/directory
- check the length of a file
- chain commands together
- retrieve a set of files
- iterate over files
- run a shell script containing her pipeline
- A shell is a program whose primary purpose is to read commands and run other programs.
- This lesson uses Bash, the default shell in many implementations of Unix.
- Programs can be run in Bash by entering commands at the command-line prompt.
- The shell’s main advantages are its high action-to-keystroke ratio, its support for automating repetitive tasks, and its capacity to access networked machines.
- A significant challenge when using the shell can be knowing what commands need to be run and how to run them.