Fundamental programming in the Bourne again shell (bash)
You might wonder why you ought to learn Bash programming. Well, here are a couple of compelling reasons:
You’re already running it
If you check, you’ll probably find that you are running bash right now. Even if you changed your default shell, bash is probably still running somewhere on your system, because it’s the standard Linux shell and is used for a variety of purposes. Because bash is already running, any additional bash scripts that you run are inherently memory-efficient because they share memory with any already-running bash processes. Why load a 500K interpreter if you already are running something that will do the job, and do it well?
You’re already using it
Not only are you already running bash, but you’re actually interacting with bash on a daily basis. It’s always there, so it makes sense to learn how to use it to its fullest potential. Doing so will make your bash experience more fun and productive. But why should you learn bash programming? Easy, because you already think in terms of running commands, CPing files, and piping and redirecting output. Shouldn’t you learn a language that allows you to use and build upon these powerful time-saving constructs you already know how to use? Command shells unlock the potential of a UNIX system, and bash is the Linux shell. It’s the high-level glue between you and the machine. Grow in your knowledge of bash, and you’ll automatically increase your productivity under Linux and UNIX – it’s that simple.
Learning bash the wrong way can be a very confusing process. Many newbies type man bash to view the bash man page, only to be confronted with a very terse and technical description of shell functionality. Others type info bash (to view the GNU info documentation), causing either the man page to be redisplayed, or
(if they are lucky) only slightly more friendly info documentation to appear.
While this may be somewhat disappointing to novices, the standard bash documentation can’t be all things to all people, and caters towards those already familiar with shell programming in general. There’s definitely a lot of excellent technical information in the man page, but its helpfulness to beginners is limited.
That’s where this series comes in. In it, I’ll show you how to actually use bash programming constructs, so that you will be able to write your own scripts. Instead of technical descriptions, I’ll provide you with explanations in plain English, so that you will know not only what something does, but when you should actually use it. By the end of this three-part series, you’ll be able to write your own intricate bash scripts, and be at the level where you can comfortably use bash and supplement your knowledge by reading (and understanding!) the standard bash documentation. Let’s begin.
Under bash and almost all other shells, the user can define environment variables, which are stored internally as ASCII strings. One of the handiest things about environment variables is that they are a standard part of the UNIX process model. This means that environment variables not only are exclusive to shell scripts, but can be used by standard compiled programs as well. When we “export” an environment variable under bash, any subsequent program that we run can read our setting, whether it is a shell script or not. A good example is the vipw command, which normally allows root to edit the system password file.