The first thing users of the UNIX or Linux operating systems come face to face with is the shell . "Shell" is the UNIX term for a user interface to the systemsomething that lets you communicate with the computer via the keyboard and the display. Shells are just separate programs that encapsulate the system, and, as such, there are many to choose from.
Systems are usually set up with a "standard" shell that new users adopt without question. However, some of these standard shells are rather old and lack many features of the newer shells. This is a shame, because shells have a large bearing on your working environment. Since changing shells is as easy as changing hats, there is no reason not to change to the latest and greatest in shell technology.
Of the many shells to choose from, this book introduces the Bourne Again shell ( bash for short), a modern general-purpose shell. Other useful modern shells are the Korn shell ( ksh ) and the "Tenex C shell" ( tcsh ); both are also the subjects of O'Reilly handbooks.
Intended Audience
This book is designed to address casual UNIX and Linux users who are just above the "raw beginner" level. You should be familiar with the process of logging in, entering commands, and doing simple things with files. Although reviews concepts such as the tree-like file and directory scheme, you may find that it moves too quickly if you're a complete neophyte. In that case, we recommend the O'Reilly handbook, Learning the UNIX Operating System , by Jerry Peek, Grace Todino, and John Strang.
If you're an experienced user, you may wish to skip reveals a few subtle differences between the bash and C shells.
No matter what your level of experience is, you will undoubtedly learn many things in this book that will make you a more productive bash userfrom major features down to details at the "nook-and-cranny" level that you may not have been aware of.
If you are interested in shell programming (writing shell scripts and functions that automate everyday tasks or serve as system utilities), you should also find this book useful. However, we have deliberately avoided drawing a strong distinction between interactive shell use (entering commands during a login session) and shell programming. We see shell programming as a natural, inevitable outgrowth of increasing experience as a user.
Accordingly, each chapter depends on those previous to it, and although the first three chapters are oriented toward interactive use only, subsequent chapters describe interactive, user-oriented features in addition to programming concepts.
This book aims to show you that writing useful shell programs doesn't require a computing degree. Even if you are completely new to computing, there is no reason why you shouldn't be able to harness the power of bash within a short time.
Toward that end, we decided not to spend too much time on features of exclusive interest to low-level systems programmers. Concepts like file descriptors and special file types might only confuse the casual user, and anyway, we figure those of you who understand such things are smart enough to extrapolate the necessary information from our cursory discussions.
Code Examples
and onwards, we include various programming problems, which we call tasks , that illustrate particular shell programming concepts. Some tasks have solutions that are refined in subsequent chapters. The later chapters also include programming exercises, many of which build on the tasks in the chapter.
Feel free to use any code you see in this book and to pass it along to friends and colleagues. We especially encourage you to modify and enhance it yourself.
If you want to try examples but you don't use bash as your login shell, you must put the following line at the top of each shell script:
#!/bin/bash
If bash isn't installed as the file /bin/bash , substitute its pathname in the above.
Chapter Summary
If you want to investigate specific topics rather than read the entire book through, here is a chapter-by-chapter summary:
introduces bash and tells you how to install it as your login shell. Then it surveys the basics of interactive shell use, including overviews of the UNIX file and directory scheme, standard I/O, and background jobs.
discusses the shell's command history mechanism (including the emacs - and vi -editing modes), history substitution and the fc history command, and key bindings with readline and bind .
covers ways to customize your shell environment without programming by using the startup and environment files. Aliases, options, and shell variables are the customization techniques discussed.
is an introduction to shell programming. It explains the basics of shell scripts and functions, and discusses several important "nuts-and-bolts" programming features: string manipulation operators, brace expansion, command-line arguments (positional parameters), and command substitution.
continues the discussion of shell programming by describing command exit status, conditional expressions, and the shell's flow-control structures: