CTEC1863 – Shell Scripting
Download
Report
Transcript CTEC1863 – Shell Scripting
CTEC 1863 – Operating
Systems
Shell Scripting
Overview
• How shell works
• Command line parameters
– Shift command
• Variables
– Including predefined/specials vars
• Functions
CTEC1863 - 2009F
2
Shells
• sh is a command interpreter
– It supports a powerful command language
– Each invocation of the sh program is called a shell
CTEC1863 - 2009F
3
Shells (2)
• OS’s allow invoking commands one at a
time from a terminal
• Shells allow users to:
– Combine commands to form new commands
– Pass positional parameters to a command
– Add or rename commands
– Execute commands within loops
– Execute commands conditionally
– Send commands into the background
CTEC1863 - 2009F
4
How it works:
CTEC1863 - 2009F
5
How it works:
• When you type a command:
– Your shell makes a copy of itself through the fork
system call (PID 230)
– Your shell puts itself to sleep (via the wait system call)
until its child process (PID 230) calls exit
– The child process calls exec(date) to overwrite itself
with the code for date
– When the date command is finished, it calls exit()
– The child process (230) dies, and your shell wakes up
again, and displays the prompt
CTEC1863 - 2009F
6
Variables
• Spring into existence by being mentioned
– May be assigned string values
– Syntax: NAME=STRING
– Thereafter "$NAME" will yield "STRING"
– No spaces around the = sign!!!!!
• Double quotes around the right-hand side
allow STRING to contain semicolons,
spaces, tabs, and newlines
CTEC1863 - 2009F
7
Examples:
$ echo NAME
NAME
$ NAME=Howard
$ echo $NAME
Howard
CTEC1863 - 2009F
$ HIS="/usr/user3"
$ ls $HIS
8
Positional Parameters
• Implicitly created when a shell script runs
– These variables are known as: $0, $1, ..., $9
Try this script:
echo "Example of positional parameters"
echo "$5"
echo $1
echo $2
echo $3 $4
$ PARAMS These parameters are passed
Also try changing “$5” to ‘$5’
CTEC1863 - 2009F
9
shift
• Used when more than 10 ($0-$9) parameters
– After the shift command is executed, the positional
parameters from $2 ... are renamed $1 ...
• E.g. if commandfile is invoked as:
commandfile arg1 arg2 arg3 arg4 arg5 arg6
$0
$1 $2 $3 $4 $5 $6
• After a shift command is executed:
commandfile arg1 arg2 arg3 arg4 arg5 arg6
$0
gone $1 $2 $3 $4 $5
CTEC1863 - 2009F
10
Shift example
Try this script:
echo "Example of shift command"
echo $1
shift
echo $1
shift
echo $1
With:
$ ./shiftit shows shift command
CTEC1863 - 2009F
11
set command
• Forces values into the positional parameters
• For example:
set -- abc def ghi is equivalent to:
$1=abc
$2=def
Try this script:
$3=ghi
set -- THESE THREE VALUES
echo $1 $2 $3
• Note:
– Positional parameters are not allowed on the left hand
side of an assignment statement.
CTEC1863 - 2009F
12
Shell Maintained Variables
• HOME: Upon login, the shell assigns a
user's login directory
• IFS: Internal field separators, default is
blank, tab, newline
• MAIL: Pathname of the file where your
mail is deposited
• PATH: Search path used to find
commands
CTEC1863 - 2009F
13
Special Variables
$#
$?
$!
$$
$-
$# records the number of arguments passed
to a shell procedure
e.g.
$ someproc x y z
sets $# to 3
– Tell if correct number of args passed in
CTEC1863 - 2009F
14
Special Variables (2)
$? contains the exit status of the last
command executed
– Zero indicates successful completion
– Anything from 1 to 255 indicates failure
• Often only want to execute next command
if last was successful
$! contains the process number of the last
process run in the background (using &)
CTEC1863 - 2009F
15
Special Variables (3)
• $$ contains the process number of the currently
running process.
– Process numbers are unique among all existing
processes.
– Often used if a shell procedure needs to create
temporary files:
…
temp=$HOME/temp.$$
ls > $temp
…
rm $temp
…
CTEC1863 - 2009F
16
Special Variables (4)
• $- is string containing the names of all the
flags currently turned on in the shell
• Also…
– $* is not considered a special variable
– Contains $1, $2, ... separated by spaces
CTEC1863 - 2009F
17
Testing Variables
• Test command
• Usage: test EXPRESSION
– test evaluates EXPRESSION to true or false
– True exit with STATUS 0
– False exit with STATUS !0
• test is used for three categories of testing:
– Files
– Strings
– Numbers
CTEC1863 - 2009F
18
Functions
• Sequence of commands
• Defining:
function_name () {
statements
}
• Use:
function_name
CTEC1863 - 2009F
19
Functions (2)
• Arguments:
print_args () {
echo “Arg 1 is $1”
echo “Arg 2 is $2”
}
• Passing arguments:
print_args arg1 arg2
CTEC1863 - 2009F
20