Bash
Bash is the program that is the command line itself. BASH stands for the "Bourne-Again" Shell, the default shell for Linux and Mac OS X (Bourne-again in reference an original UNIX shell written by Stephen Bourne; BASH is a free software rewrite, part of the GNU project).
BASH scripts are, in the simplest form, just a sequence of command line commands saved in a file (or files). In this way, you can save a complicated series of steps in a single file (or BASH script). Using variables, you can turn a script into a tool that can, for instance, be applied to different input files, or perform an image transformation to a variable degree.
Variables
name="Francesco" echo Hello there name echo Hello there $name
Unlike most scripting languages, Bash is not forgiving of extra spaces and gets confused if you add them. Notice also how unlike most programming languages, in Bash text is text first, and interpreted as an expression by exception. It may be helpful to think of the $ as meaning substitute the value.
The use of curly braces around the name is optional, but is helpful to sometimes mark the end of a name if necessary.
name=Michael echo Hello there $name! echo $name123 echo ${name}123
There are useful special forms of variable substitution in Bash:
${name:-Joe} | Return a default value if the variable is undefined If name exists and isn't null, return its value; otherwise, return 'Joe'. |
|
${name:offset:length} | Substring String starting from offset, up to length chars. Length can be omitted in which case you get the rest of the text. A negative offset is relative to the end (-1 means last character). |
|
${#name} | Length Returns the length of a variable. |
|
${name:=Joe} | Sets a default value if the variable is undefined Return the value of name if it exists and isn't null; otherwise, set it to 'Joe' and return that. |
|
${name:+value} | Test for a variable being set Return the value if name is defined |
|
${name:?message} | Catches errors from a variable being undefined Return the value of name if it exists and isn't null; otherwise, prints the message and stops the script (though not guaranteed to stop -- depends on shell?) |
"Pattern-strippers" (with ShellWildcards, note that these are different from a *Regular Expression*)
${variable#pattern} | Delete pattern \from start (smallest match) | |
${variable##pattern} | Delete pattern \from start (longest match) | |
${variable%pattern} | Delete pattern \from end (smallest match) | |
${variable%%pattern} | Delete pattern \from end (longest match) |
Arithmetic
You can do some basic arithmetic in the Bash. Note that all match is whole-number based -- doing maths with fractional numbers requires a different scripting language (like Python!)... but for basics, Bash is fine.
Command Substitution
Loops
If-Then-Else Braches
Functions
Resources
Other tutorials for BASH scripting:
- http://www.gentoo.org/doc/en/articles/bash-by-example-p1.xml
- http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
- http://tldp.org/LDP/abs/html/