25
1 Operating Systems Lecture 3 Shell Scripts

1 Operating Systems Lecture 3 Shell Scripts. 2 Brief review of unix1.txt n Glob Construct (metacharacters) and other special characters F ?, *, [] F Ex

Embed Size (px)

Citation preview

1

Operating Systems

Lecture 3Shell Scripts

2

Brief review of unix1.txt

Glob Construct (metacharacters) and other special characters ?, *, [] Ex. ls prog?.c ls p*.c ls ???.* ls prog[123].c ls [m-s]* ls [1-5A-Z] ls [!ABC] [!a-z0-47] Other characters: ~; ~user; ~-; ~+

3

More unix commands

grep (egrep) find head tail cut paste sed tr Tee Jobs fg %1 !! !-n !cmd ^str1^str2^

4

Shell scripts

Typing on command line One time task

Shell scripts Executable ASCII file containing shell command Can run like a program Deal with complex task Repeat it later

5

Shell script cont’d

A shell script, in its most basic form, is simply a collection of operating system commands put into a text file in the order they are needed for execution. #!/bin/bash rm -f /tmp/listing.tmp > /dev/null 2>&1

touch /tmp/listing.tmp ls -l [a-z]*.doc | sort > /tmp/listing.tmp

lpr -Ppostscript_1 /tmp/listing.tmp rm -f /tmp/listing.tmp

6

Shell Programming

1. Shell scripts must be marked as executable:chmod a+x myScript

2. Use # to start a comment. Comments run from # to the end of the line.

3. All shell scripts begin with the interpreter you want to use:#!/bin/bash

Example:#!/bin/bashwho | grep ycjiangexit 0

7

Running a shell script

To run a UNIX script:

1) Type the script into a file.

2) Change the file permission to executable.

3) Execute it (by typing the filename at the prompt).

8

Shell Variables

Shell variables are stored as strings:

Example:

#!/bin/bashx=1 # Note: No spaces in assignment.

# If space after x, thinks x is a commandecho The value of x is $x # $x prints the value of variable xecho The home directory is $HOMEecho The current shell is $SHELL

(Note: to debug, use -x: sh -x scriptFileNameThis will list the commands as they are executed.)

9

Using Quotes

Single quote: Groups together characters until end quote.$ is not processed.Example: #!/bin/sh grep Constance John /etc/passwd

#Tries to open John as a file grep 'Constance John' /etc/passwd

#Searches for Constance John #in passwd file

x=1 echo $x #echos 1 echo '$x' #echos $x

exit 0

10

Double Quotes

Double quotes act like single quotes, except the $ is processed:

#!/bin/bashx=1echo $x #echos the value of xecho "$x" #echos the value of x

address="College of the Engineering and Science"echo $address #echos College of the Engineering and Scienceecho "$address" #dittoexit 0

11

More Quotes

Backslash (\): Places a single quote around a character:\> is the same as '>'

Back quote (`): Tells shell to execute the enclosed command and insert the output here:

#!/bin/bashecho There are `who | wc -l` users logged onexit 0

Try these examples out for yourself!

12

Evaluating Expressions

Use expr to evaluate arithmetic expressions:

Example:

#!/bin/bashi=1i=`expr $i + 1` #use back quoteecho $i #prints out 2exit 0

13

Common Mistakes

Mistake 1: Leaving out expr:#!/bin/bashi=1i=$i+1echo $i #prints 1+1exit 0

Mistake 2: Leaving out spaces around +#!/bin/bashi=1i=`expr $i+1`echo $i #prints out 1+1exit 0

14

Using Arguments with a Shell script

Example command:>myShell arg1 arg2 arg3

arg1 is accessed by $1, arg2 is accessed by $2, etc.

Question: What is accessed by $0?

The number of arguments (not including the command) is given by $#

$# for the above command line is 3.

15

example

#!/bin/bash #source: prnargs #shell pgm to print out its first 2 args echo The first argument is: $1 echo The second argument is: $2 exit 0

16

To run:

First, make sure it is executable (has execute permissions for user), /home/ycjiang> prnargs "Hello there" world

The first argument is: Hello there The second argument is: world

Note: spacing is correct, it ignores fact that I lined up the 2 args in the echo

--could have used quotes in echo, echo "The first argument is: " $1 echo "The second argument is:" $2 --or could have used echo backslash

-escape TAB char, \t (see man echo) echo -e "The first argument is:\t" $1 echo -e "The second argument is:\t" $2

17

The shift command

The shift command shifts each variable down 1.$2 becomes $1, etc.$0 is not shifted. It always refers to the command name.

Example command line:>cmd x y z

Example script:#!/bin/shecho $# $0 $1 $2 #prints 3 cmd x yshiftecho $# $0 $1 $2 #prints 2 cmd y zshift

echo $# $0 $1 $2 #prints 1 cmd zexit 0

18

The read command

Use the read command to read in from the keyboard:Example:

!/bin/bashread x y zecho "x = " $xecho "y = " $yecho "z = " $zread textecho "text = " $textexit 0

If type "I love shell programming!" at first read:$x is "I", $y is "love" and $z is "shell programming!"

If type "I love shell programming!" at second read:$text is "I love shell programming"

Use < to read in from a file:read x y z < myFile

19

Conditionals

Example of a conditional statement:

#!/bin/bashread nameif [ "$name" = Joe ]then

echo It is Joeelse

echo It is "$name", not Joefi #fi marks the end of the statementexit 0

20

Integer comparisons

-eq (or =)is equal to-ge greater than or equal to-gt greater than-le less than or equal to-lt less than-ne not equal to

Example:if [ num1 -lt num2 ]then

...fi

21

for loops

Example:#!/bin/bashfor i in 1 2 3 4 5do

for j in .1 .2 .3 .4 .5do

echo $i$jdone

doneexit 0

Note: break command exits loopcontinue loops back to top, skipping the rest of the

current iteration.

22

while loops

Example:#!/bin/bashi=1num=5while [ $i -le $num ]do

echo $i >> file_testi=`expr $i + 1`

doneexit 0

What does this do?Note: while read x

loops until zero exit status not returned from read.

23

Defining Functions

Example:#!/bin/bashnu(){

who | wc -l}echo Number of users is `nu`echo Number of users is now `nu`exit 0

24

Writing Good Shell Scripts

1. Verify that the correct number of arguments is used:#!/bin/bashif [$# -ne 3 ]then

echo "only $# parameters entered."echo "Usage: $0 arg1 arg2 arg3"exit 127

fiexit 0

2. Use good design and style (e.g. use functions and comments.

3. Return an exit status:exit 0 #things worked OKexit 127 #non-zero: error occurred.

See /usr/include/sysexits.h for sample exit codes.

25

Tutorials on shell scripting

http://www.injunea.demon.co.uk/