Shell scripting
From Gender and Tech Resources
Revision as of 09:14, 10 July 2015 by Lilith2 (Talk | contribs) (Created page with "== Shell scripting == Shell scripts are good for automating repetitive shell tasks. Bash and other shells include the “usual” constructs found in programming languages, su...")
Contents
Shell scripting
Shell scripts are good for automating repetitive shell tasks. Bash and other shells include the “usual” constructs found in programming languages, such as for loops, tests, if and case statements, but there is only one type of variable: strings.
Shells
Unix has variety of Shells. Bourne shell (sh), Bourne again shell (bash), C shell (csh), Korn shell (ksh), Tenex C shell (tcsh). Use the which or whereis unix commands to find out where a specific shell is located:
# which bash /bin/bash
or:
# whereis bash bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
Hello World bash script
Backup and restore using brace expansion
The brace expansion is present in two basic forms, string lists and ranges. It can be switched on and off under runtime by using the set
builtin and the option -B
and +B
or the long option braceexpand
. If brace expansion is enabled, the stringlist in SHELLOPTIONS
contains braceexpand
.
When doing:
$ echo {a,b}$PATH
the brace expansion does not expand the variable - this is done in a later step. Brace expansion just makes it being:
echo a$PATH b$PATH
Another common pitfall is to assume that a range like {1..200}
can be expressed with variables using {$a..$b}
. It simply is not possible, because it's the very first step in doing expansions. A possible way to achieve this, is using the eval
command, which basically evaluates a commandline twice:
eval echo {$a..$b}
For instance, when embedded inside a for loop in a shell script:
for i in $(eval echo {$a..$b})
Backup script using brace expansion:
Restore script using brace expansion: