Difference between revisions of "Shell scripting"
From Gender and Tech Resources
m |
m |
||
Line 12: | Line 12: | ||
== Print system related information == | == Print system related information == | ||
+ | |||
+ | === Environment === | ||
+ | |||
+ | === Testing === | ||
+ | |||
+ | Sometimes we need a simple test script, a simple infinite loop (see [[Kinky_linux_command-line#Changing_process_priority|Changing process priority]] to illustrate process commands. | ||
== Backup and restore == | == Backup and restore == | ||
Line 26: | Line 32: | ||
Another common pitfall is to assume that a range like <code>{1..200}</code> can be expressed with variables using <code>{$a..$b}</code>. It <strong>simply is not possible</strong>, because it's the very first step in doing expansions. A possible way to achieve this, is using the <code>eval</code> command, which basically evaluates a commandline twice: | Another common pitfall is to assume that a range like <code>{1..200}</code> can be expressed with variables using <code>{$a..$b}</code>. It <strong>simply is not possible</strong>, because it's the very first step in doing expansions. A possible way to achieve this, is using the <code>eval</code> command, which basically evaluates a commandline twice: | ||
eval echo {$a..$b} | eval echo {$a..$b} | ||
− | + | ||
+ | For instance, when embedded inside a for loop in a shell script: | ||
for i in $(eval echo {$a..$b}) | for i in $(eval echo {$a..$b}) | ||
Revision as of 14:29, 11 July 2015
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.
Contents
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
Environment
Testing
Sometimes we need a simple test script, a simple infinite loop (see Changing process priority to illustrate process commands.
Backup and restore
Preliminaries
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
Restore script
Arp sweeps
If you regularly do arp sweeps of your network, you can use arp-scan or develop your own from this basic script:
#!/bin/bash PREFIX=$1 INTERFACE=$2 for SUBNET in {1..255} do for HOST in {1..255} do echo "[*] IP : "$PREFIX"."$SUBNET"."$HOST arping –c 3 –i $INTERFACE $PREFIX"."$SUBNET"."$HOST 2> /dev/null done done
If named arpsweep (or arpsweep.sh) call with (for example):
$ arpsweep 192.168 eth0