The Bourne-again shell is a Unix shell written for the GNU Project. Its ubiquity on Unix and Linux systems makes it a powerful tool for writing scripts to perform tedious actions (e.g. moving and modifying files).
| Resource | Progress | Division |
|---|---|---|
| Bash Guide for Beginners | -/12 | Chapters |
| Advanced Bash-Scripting Guide | 3/37 | Chapters |
| GNU Bash Reference Manual | -/10 | Sections |
| IBM Bash By Example, Part 1 | 1/3 | Parts |
| Learning the bash Shell 1 | -/12 | Chapters |
An environment variable can be localized to a single command if it’s declaration is prepended to the command. For example,
$ CFLAGS="-Wall" make script
passes the moifier, -Wall, to the make
command.
Use :: like the scope resolution operator in C++.
Although it doesn’t provide namespacing it can still be used to
associate a function with a library.
-x in a
logging functionBash 4.4 added support for setting options locally within a function
using local -.
function log_error {
{ local -; set +x; } 2> /dev/null # Silently disable xtrace
# Handle logging
}It is possible to simplify error handling using a subshell, however it does come with significant drawbacks.
function create_file_on_dev {
local device="${1}"
local path="${1}"
( set -e
mount "${device}" /mnt
trap "umount /mnt" EXIT
touch "/mnt/${path}"
); return $?
}In this example we do not need to check the exit code of each command
since set -e will exit immediately from the subshell. The
return $? statement will return the exit code of that
command from the function. Additionally we can trap on EXIT
to do some clean-up (e.g. guarantee that the device is unmounted) even
if a following command fails.
This pattern works well for many cases, but causes scoping issues when modifying globals. It cannot be used if you’re using the additional 3-9 file descriptors.
Newham, Cameron and Bill Rosenblatt. Learning the bash Shell. 3rd ed. Cambridge: O’Reilly, 2005.↩︎