Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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