19 October 2009
Pro Bash Programming:
Scripting the GNU/Linux Shell
I wrote Pro Bash Programming as a tutorial that introduces the shell, and bash specifically, as a programming language. If you need a program on any Unix system, you should consider the shell before any other language.
The shell is a programming language. Don't let anyone tell you otherwise. The shell is not just glue that sticks bits together. The shell is a lot more than a tool that runs other tools. The shell is a complete programming language!
When a Linux user asked me about membership databases, I asked
him what he really needed.
He wanted to store names and addresses for a couple of hundred
members and print mailing labels for each of them.
I recommended using a text editor to store the information in a
text file, and I provided a shell script to create the labels in
ps-labels, appeared in my first
book, Shell Scripting Recipes: A
When the SWEN worm was dumping hundreds of megabytes of junk into my mailbox every few minutes, I wrote a shell script to filter them out on the mail server and download the remaining mail to my home computer. That script has been doing its job for several years.
I used to tell people that I did most of my programming in the shell but switched to C for anything that needed the extra speed. It has been several years since I have needed to use C, so I no longer mention it. I do everything in the shell.
A shell script is as much a program as anything written in C, Python, or any other language. Just because shell scripts are easier to write doesn't mean they should take a back seat to compiled programs or other scripting languages. I use the terms script and program interchangeably when referring to tasks written in the shell.
Why the Shell?
Some Linux users do all of their work in a GUI environment and never see a command line. Most, however, use the shell at least occasionally and know something about Unix commands. It's not a big step from there to saving oft-repeated commands in a script file. When they need to extend the capabilities of their system, the shell is the natural way to go.
The shell also has important advantages over other programming languages:
- It interfaces simply and seamlessly with the hundreds of Unix utilities.
- It automatically expands wildcards into a list of file names.
- Lists contained in a variable are automatically split into their constituent parts.
Just the Shell, Ma'am, Just the Shell
While most shell programs do call external utilities, a lot of programming can be done entirely in the shell. Many scripts call just one or two utilities for information that is used later in the script. Some scripts are little more than wrappers for other commands such as awk, grep, or sed.
This book is about programming in the shell itself. There's a sprinkling of the second type, where the script gets information (such as the current date and time) and then processes it. The third type gets barely more than a cursory nod.
Download all the scripts in a compressed tar archive.
Modified 03 Feb 2014