This is a tutorial introduction to the Unix shell, suitable for people who want to know how to use it effectively and how to write sophisticated shell scripts.
This document is written in troff, using the ms
macros plus some
extras included with it. A Makefile is included that will build the
document on most Unix systems.
The sources are maintained using the git distributed revision control system. The latest version of the repository may be found at: https://github.com/pmetzger/ShellTutorial
A PDF version of the document should also be available for download from: https://github.com/pmetzger/ShellTutorial/releases
The tutorial was originally written by the creator of the modern shell, S. R. Bourne, as part of the documentation for the Version 7 Unix shell, aka the "Bourne Shell". It was included as part of the Version 7 Unix sources.
The document was lightly updated by Mark Seiden for the 4.3BSD Unix release, but otherwise remained dormant for some decades. However, the text became open source when Caldera released the Version 7 Unix sources under a modified BSD license.
In 2010 I (Perry Metzger) was teaching an Intro to Unix class and needed a good tutorial on the shell. I believed Bourne's original introduction was still the best and most thorough one that was freely available, but it was by then substantially out of date on many details that would be important to beginners. I therefore substantially modernized it and used it successfully for my class.
I'm releasing it here so that it may be of wider benefit to people learning about the shell.
The original document is under a modified BSD license. My modifications are under the similar but simpler ISC license.
For practical purposes, you can feel free to do more or less whatever you want with the document, including giving copies to all your students and making improvements or modifications to it, so long as you leave the copyright statement intact.
I'm actively interested in comments, suggestions and improvements to this document. Please let me know, either with a bug report on Github or by email. (My address is "perry" at the domain "piermont.com")