CTEC 1863 Operating Systems Shell Scripting Overview How

  • Slides: 20
Download presentation
CTEC 1863 – Operating Systems Shell Scripting

CTEC 1863 – Operating Systems Shell Scripting

Overview • How shell works • Command line parameters – Shift command • Variables

Overview • How shell works • Command line parameters – Shift command • Variables – Including predefined/specials vars • Functions CTEC 1863 - 2009 F 2

Shells • sh is a command interpreter – It supports a powerful command language

Shells • sh is a command interpreter – It supports a powerful command language – Each invocation of the sh program is called a shell CTEC 1863 - 2009 F 3

Shells (2) • OS’s allow invoking commands one at a time from a terminal

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 CTEC 1863 - 2009 F 4

How it works: CTEC 1863 - 2009 F 5

How it works: CTEC 1863 - 2009 F 5

How it works: • When you type a command: – Your shell makes a

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 CTEC 1863 - 2009 F 6

Variables • Spring into existence by being mentioned – May be assigned string values

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 CTEC 1863 - 2009 F 7

Examples: $ echo NAME $ NAME=Howard $ echo $NAME Howard CTEC 1863 - 2009

Examples: $ echo NAME $ NAME=Howard $ echo $NAME Howard CTEC 1863 - 2009 F $ HIS="/usr/user 3" $ ls $HIS 8

Positional Parameters • Implicitly created when a shell script runs – These variables are

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’ CTEC 1863 - 2009 F 9

shift • Used when more than 10 ($0 -$9) parameters – After the shift

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 arg 1 arg 2 arg 3 arg 4 arg 5 arg 6 $0 $1 $2 $3 $4 $5 $6 • After a shift command is executed: commandfile arg 1 arg 2 arg 3 arg 4 arg 5 arg 6 $0 gone $1 $2 $3 $4 $5 CTEC 1863 - 2009 F 10

Shift example Try this script: echo "Example of shift command" echo $1 shift echo

Shift example Try this script: echo "Example of shift command" echo $1 shift echo $1 With: $. /shiftit shows shift command CTEC 1863 - 2009 F 11

set command • Forces values into the positional parameters • For example: set --

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. CTEC 1863 - 2009 F 12

Shell Maintained Variables • HOME: Upon login, the shell assigns a user's login directory

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 CTEC 1863 - 2009 F 13

Special Variables $# $? $! $$ $- $# records the number of arguments passed

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 CTEC 1863 - 2009 F 14

Special Variables (2) $? contains the exit status of the last command executed –

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 &) CTEC 1863 - 2009 F 15

Special Variables (3) • $$ contains the process number of the currently running process.

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 … CTEC 1863 - 2009 F 16

Special Variables (4) • $- is string containing the names of all the flags

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 CTEC 1863 - 2009 F 17

Testing Variables • Test command • Usage: test EXPRESSION – test evaluates EXPRESSION to

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 CTEC 1863 - 2009 F 18

Functions • Sequence of commands • Defining: function_name () { statements } • Use:

Functions • Sequence of commands • Defining: function_name () { statements } • Use: function_name CTEC 1863 - 2009 F 19

Functions (2) • Arguments: print_args () { echo “Arg 1 is $1” echo “Arg

Functions (2) • Arguments: print_args () { echo “Arg 1 is $1” echo “Arg 2 is $2” } • Passing arguments: print_args arg 1 arg 2 CTEC 1863 - 2009 F 20