Shell Programming Ver 4.0 1 Objectives Introduction to Shells Introduction to shell programming ...

Post on 13-Dec-2015

233 views 1 download

Tags:

Transcript of Shell Programming Ver 4.0 1 Objectives Introduction to Shells Introduction to shell programming ...

Shell Programming Ver 4.0 1

Objectives Introduction to Shells

Introduction to shell programming

Shell variables

Arithmetic Operations

Conditions - test

Conditional and looping statements

The getopts command

Objectives Introduction to Shells

Introduction to shell programming

Shell variables

Arithmetic Operations

Conditions - test

Conditional and looping statements

The getopts command

SHELL PROGRAMMING

Shell Programming Ver 4.0 2

Shell Programming (contd.)

Introduction

Unix offers several command processors

Called as shells

Primary interface to the user

The two basic shells are

Bourne Shell

C Shell

The shells are

Programs under execution

Shell Programming Ver 4.0 3

Shell Programming (contd.)

Introduction

The various shells

Name of the Formal name

Shell program

sh Bourne Shell

rsh Restricted Bourne Shell

ksh Korn Shell

rksh Restricted Korn Shell

bash Bourne Again Shell

csh C Shell

Shell Programming Ver 4.0 4

Shell Programming (contd.)

Introduction

The Bourne Shell

Named after the developer Stephen R. Broune

The prompt displayed by this shell is “ $ ”

Supports for processes both

Foreground and background

Pipes, filters etc.

Most unix implementations includes this shell

Shell Programming Ver 4.0 5

Shell Programming (contd.)

Introduction

C-Shell

Developed by Bill Joy

Advantages

History mechanism

Job control

Aliasing

- Alternate names for commands

Shell Programming Ver 4.0 6

Shell Programming (contd.)

Introduction

Restricted Shell

Special version of Bourne Shell

Has a limited set of capabilities and privileges

Korn Shell

Named after David Korn

Up-ward Compatible extension of Bourne Shell

Has the history, job control and command aliasing

Shell Programming Ver 4.0 7

Shell Programming (contd.)

Introduction

Restricted Korn Shell

Restricted version of Korn Shell

Bourne Again Shell

Product of Free Software Foundation

Developed by Brian Fox

Extended version of Bourne Shell

Shell Programming Ver 4.0 8

Shell Programming (contd.)

Introduction

What is a shell ?

A program to interpret the commands

It reads, interprets and process the command

The shell signals it is ready by displaying a prompt

On a UNIX system there are various shells

The UNIX system starts a default shell for a user

Reading an entry from the /etc /passwd file

Shell Programming Ver 4.0 9

Shell Programming (contd.)

Introduction to shell scripts

All shells has a built in language

A user can write a script using the language and

The shell will execute that script

The script does not require compilation or linking

The shell interprets the script and

executes directly, using kernel facility

Shell programs can be used for various tasks

Shell Programming Ver 4.0 10

Shell Programming (contd.)

Introduction

Shell Script Uses

Customizing the work environment

Automating some routine tasks

Backing up all the files

Producing the sales report every month

Executing system procedures

Shutting down

formatting the disk etc…

Shell Programming Ver 4.0 11

Shell Programming (contd.)

Introduction

The # symbol marks the beginning of a comment

The execute permission for the file must be set

chmod 744 program1

# program1

ls

who

pwd

Shell Programming Ver 4.0 12

Shell Programming (contd.)

Introduction

When a shell script is executed

The login shell creates a new shell for the script to be executed

The login-in shell waits for the new shell to terminate

Any task that can be achieved at the shell prompt

Can be achieved in the shell script

Shell Programming Ver 4.0 13

Shell Programming (contd.)

Shell variables

Provided to store and manipulate data

Any number of variables can be

Created and Destroyed

Rules for building a variable

A variable name is a combination of

Alphabets, digits and underscore (‘ _ ‘ )

Comas and blanks are not allowed

Shell Programming Ver 4.0 14

Shell Programming (contd.)

Shell variables

Rules for building a variable ( Contd. )

The first character must be an alphabet

They can be of any length

Variable names are case-sensitive

#program2

echo What is your name\?

read name

echo Hello $name

Shell Programming Ver 4.0 15

Shell Programming (contd.)

Shell variables

The assignment operator

To assign values to a variable

There should be no space on either side of the assignment

operator

The variable is created if it did not exist

name=samage=20dirname=/usr/sam

Shell Programming Ver 4.0 16

Shell Programming (contd.)

Shell variables

System variables

The shell provides the values for these variables

Used by the system and govern the environment

These variables can be changed

To customize to system environment

Example

The dollar prompt can be changed

$ PS1=“Next”

Shell Programming Ver 4.0 17

Shell Programming (contd.)

System variables

Variable Meaning

PS2 System prompt2 ( default “>” )

PATH Path which shell searches to execute

HOME Default working directory

LOGNAME login name

IFS Internal field separator

SHELL Default working shell

TERM Name of the terminal

TZ Time zone

Shell Programming Ver 4.0 18

Shell Programming (contd.)

System variables

The list of all system variables and values can be

displayed using the set command

$ set

HOME=/usr/sam

IFS=

LOGNAME=sam

MAIL=/usr/spool/mail/sam

PATH=/bin:/usr/bin:/usr/sam:.

...

Shell Programming Ver 4.0 19

Shell Programming (contd.)

Shell Keywords

Borne shell has a set of predefined words

They cannot be used as variable names

echo read set unset readonly shift export

if else fi while do done for

until case esac break continue exit return

trap wait eval exec ulimit umask

Shell Programming Ver 4.0 20

Shell Programming (contd.)

Shell variables

All shell variables are string variables

a=20 is stored as characters 2 and 0

A variable can contain more than one word

The assignment must be made in double quotes

$ c=“Two Words”

$ echo $c

Shell Programming Ver 4.0 21

Shell Programming (contd.)

Shell variablesAssignment can be carried out in a single line

All the variables defined in a shell script Are destroyed after the shell script execution is over

The user defined variables can be defined at the Dollar prompt or

In a shell script

$name=sam age=20$echo Name of the boy is $name,and his age is $ageName of the boy is sam,and his age is 20

Shell Programming Ver 4.0 22

Shell Programming (contd.)

Shell variables

A null variable is a variable which is not initialized

$ a=“ ” b=‘ ‘ c=

Echoing a null variable a blank line appears on the

screen

The shell ignores a null variable in a command

$ var1=“ ” var2=“ ”

$ echo wc -l $var1 $var2 file1

178

Shell Programming Ver 4.0 23

Shell Programming (contd.)

Shell variables

Constants are variables made read-only

$a=20

$readonly a

All readonly variables can be listed

By entering readonly at command prompt

$ readonly

Shell Programming Ver 4.0 24

Shell Programming (contd.)

Shell variables

A variable can be removed by using the unset command

$ unset b

The variable and the value are erased from the memory

Unsetting a system variable is not allowed

$ unset PS1 ( error )

Shell Programming Ver 4.0 25

Shell Programming (contd.)

Command line argumentsTo convey information from the user to the program

The user specifies arguments at the command line

These arguments can be accessed using Positional parameters

The positional parameters are specified in the script as $1 to $9

Example- To copy a file from a srcfile to dstfile

$ mycopy srcfile dstfile

Shell Programming Ver 4.0 26

Shell Programming (contd.)

Command line arguments

The statement cp $1 $2 is translated to cp srcfile dstfile

Write a shell script which accepts a filename Changes the permissions to rwxr--r-- ( 744 )

#mycopy

#usage: mycopy <source file> <destination file >

cp $1 $2

echo copy completed.

cat $2

Shell Programming Ver 4.0 27

Shell Programming (contd.)

Positional ParametersThe user cannot assign values to positional parameters

$1=sam $2=100 (error )

The set command can be used to assign values to the positional parameters

$ set This is my first shell script

$ echo $1 $2 $3 $4 $5 $6

This is my first shell script

$ set sam is good at shell programming

$ echo $1 $2 $3 $4 $5 $6

sam is good at shell programming

Shell Programming Ver 4.0 28

Shell Programming (contd.)

Positional Parameters

The command in the quoting metacharacter is replaced by the output of the command

Theses quote are called reverse quote or accent graves

Write a program to rename a filename to filename.logname

Write a program to display date in the desired format

$ set ‘cat lucky‘

$ echo $1 $2 $3 $4 $5 $6

Shell Programming Ver 4.0 29

Shell Programming (contd.)

Positional ParametersThe parameter $# can be used to find out the number of

parameters from set command parameters from the command line

The Unix metacharacter * represents all the files when used as an argument

$ prgname *

# prgname

#usage prgname <list of files >

echo Total number of files = $#

Shell Programming Ver 4.0 30

Shell Programming (contd.)

Positional Parameters If the number of parameters are greater than nine

The shift command can be used to shift the parameters The $* can be used for all the positional parameters

$ set a b c d e f g h i j k l m n o p

$ echo $1 $2 $3 $4 $5 $6 $7 $8 $9

a b c d e f g h i

$ shift 7

$ echo $1 $2 $3 $4 $5 $6 $7 $8 $9

h I j k l m n o p

Shell Programming Ver 4.0 31

Shell Programming (contd.)

Arithmetic in shell scriptsThe values stored in the variables are of type characterThe expr can be used to evaluate an arithmetic

expression

# example of arithmetic program

a=20 b=10

echo ‘expr $a + $b‘

echo ‘expr $a - $b‘

echo ‘expr $a \* $b‘

echo ‘expr $a / $b‘

echo ‘expr $a % $b‘

Shell Programming Ver 4.0 32

Shell Programming (contd.)

Arithmetic in shell scriptsTerms of the expression must be separated by blanksThe priorities for arithmetic operators are

/, * and % first priority

+ and - Second priority

If the operators of the same priority occur in an expression

Preference is give to the one occurring first

$a \* $b + $c / $d $a \* $b is evaluated first

To force a particular order parenthesis must be used$a \* \( $b + $c \) / %d

Shell Programming Ver 4.0 33

Shell Programming (contd.)

Arithmetic in shell scriptsThe expr can be used only for integers

For Floating point the command bc is used

# example of floating point arithmetic program

a=15.5 b=7.8

c=‘echo $a + $b | bc‘

d=‘echo $a - $b | bc‘

e=‘echo $a \* $b | bc‘

f=‘echo $a / $b | bc‘

Shell Programming Ver 4.0 34

Shell Programming (contd.)

Escape sequences

The echo statement can contain escape sequences

Sequence Behavior\n newline character\r Carriage return\b backspace\t Tab\c cursor position

Shell Programming Ver 4.0 35

Shell Programming (contd.)

Read command

If only two values are supplied the third one would be treated as null variable

If more than three values are supplied The first three are supplied to a, b and c The remaining are appended to the third

#prgname

echo Enter the values of a,b and c

read a b c

echo a b c

Shell Programming Ver 4.0 36

Shell Programming (contd.)

ExercisesA persons basic salary is entered through a keyboard

His DA is 35%of basic

HRA is 20% of his basic

Write a program to calculate his gross salary

If a five digit number is entered through a keyboard Write a program to calculate the sum of the digits

The file /etc/passwd contains information about all users Write a program that takes a login name as an argument,obtain

information from the /etc/password

Print the information in an understandable format

Shell Programming Ver 4.0 37

Shell Programming (contd.)

Control Instructions

Specify the order of execution of the program

Sequence Control Instructions

Selection or Decision Control Instructions

Loop Control Instructions

Case Control Instructions

The Sequence Control Instructions ensures that

The instructions are executed in the same order as they appear

Shell Programming Ver 4.0 38

Shell Programming (contd.)

Decision ControlBourne shell offers four decision making instructions

if-then-fi statement if-then-else-fi statement if-then-elif-else-fi statement case-esac statement

The simplest form of if-then-fi statement is

if control commandcommand1

fi

Shell Programming Ver 4.0 39

Shell Programming (contd.)

if-then-fi statement

This statement tests the exit status of the command

Weather it was executed successfully or not

The exit status is 0 on success

The exit status is 1 when not successful

Example

If cp command is successful in copying it returns 0

If grep is successful in locating the pattern, it returns 0

The control command can be any valid UNIX command

Shell Programming Ver 4.0 40

Shell Programming (contd.)

if-then-fi statement If the exit status of the control command is 0

The command1 is executed else it is not executed

Every if statement must end with fi

echo Enter source and destination files

read src dst

if cp $src $dst

then

echo file Successfully copied

fi

Shell Programming Ver 4.0 41

Shell Programming (contd.)

if-then-else-fi statement

echo Enter source and destination files

read src dst

if cp $src $dst

then

echo file Successfully copied

# . . . . .

else

echo Failed to copy

fi

Shell Programming Ver 4.0 42

Shell Programming (contd.)

if-then-else-fi statement

The group of commands between then and else is called

if block

The group of commands between else and fi is called

else block

Even if there is only one command to be executed

The fi cannot be dropped

Shell Programming Ver 4.0 43

Shell Programming (contd.)

Test commandPerforms a test and returns the result as success or

failure

#Use of test command

echo Enter a number from 1 to 10

read num

if test $num -lt 5

then

echo the number is less than five

fi

Shell Programming Ver 4.0 44

Shell Programming (contd.)

Test command

The test command can carry out several tests

Numerical tests

Comparing numbers if they are greater, lesser or equal to

String tests

Testing if strings are same,greater than zero etc

File tests

Tests if it is a directory,character special files etc

Shell Programming Ver 4.0 45

Shell Programming (contd.)

Test commandNumerical test

Operator Meaning

-gt greater than

-lt less than

-ge greater than or equal to

-le less than or equal to

-ne not equal to

-eq equal to

Shell Programming Ver 4.0 46

Shell Programming (contd.)

Test command# Example of numeric testecho Enter basic salaryread bsif [ $bs -lt 2500 ]then

hra=‘echo $bs \* 10 / 100 | bc‘da=‘echo $bs \* 90 / 100 bc‘

elsehra=500da=‘echo $bs \* 98 / 100 | bc‘

figs=‘echo $bs + $hra + $da | bc‘echo Gross salary = Rs. $gs

Shell Programming Ver 4.0 47

Shell Programming (contd.)

Test commandString test

Operator Meaning

string1 = string2 True if the strings are same

string1 != string2 True if the strings are different

-n string True if the length of the string

is greater than zero

-z string True if the length is zero

string True if the string is not null string

Shell Programming Ver 4.0 48

Shell Programming (contd.)

Test command

str1=“Good”

str2=“bad”

str3=

[$str1 = $str2 ]

echo$?

[$str1 != $str2]

echo$?

[-n $str1 ]

echo$?

[-z “$str3” ]

echo $?

[-z $str3 ]

echo$?

[ “Str3” ]

echo$?

Shell Programming Ver 4.0 49

Shell Programming (contd.)

Test command If there are more than two words in a string

They have to be enclosed in double quotes for comparison

str1=“Hello World”

str2=“Goodbye World”

[“$str1” = “$str2” ]

#[$str1 = $str2 ] is an error

echo$?

Shell Programming Ver 4.0 50

Shell Programming (contd.)

Test commandFile test

Operator Meaning

-s file True if file exist & greater than zero

-f file True if file exist & is not a directory

-d file True if file exist & is a directory

-c file True if file exist &

is a character special file

-b file True if file exist & block special file

Shell Programming Ver 4.0 51

Shell Programming (contd.)

Test commandFile test

Operator Meaning

-r file True if file exist & has read permissions

-w file True if file exist & has write permissions

-x file True if file exist &

has execute permissions

-k file True if file exist &

its sticky bit is set

Shell Programming Ver 4.0 52

Shell Programming (contd.)

File test# prgname

# To test if the file has write permission

echo Enter file name

read filename

if [ -w $filename ]

then

echo Type to append it to the file, Ctrl + D to stop

cat >> $filename

else

echo Sorry You don’t have the permission

fi

Shell Programming Ver 4.0 53

Shell Programming (contd.)

Nested if - else

The if statement can be nested

if control commandthen

do thisand this

elseif control commandthen

do thiselse

do thisfi

fi

Shell Programming Ver 4.0 54

Shell Programming (contd.)

Nested if - elseif control command

then

if control command

then

do this

else

do this

and this

fi

else

do this

fi

Shell Programming Ver 4.0 55

Shell Programming (contd.)

if-then-elif-else-fi# example of nested else using the elif clause

echo “Enter the your name \c”

read name

if [ “$name” = sam ]

then

echo hello sam

elif [ “$name” = tom ]

then

echo hello tom

else

echo Sorry you do not have permissions

fi

Shell Programming Ver 4.0 56

Shell Programming (contd.)

Logical operators

Operator Meaning

-a AND operator

-o OR operator

! NOT operator

Shell Programming Ver 4.0 57

Shell Programming (contd.)

Logical operators# example logical operatorsecho “Enter any file name \c”read fnameif [ ! -z “$fname” ]then

if [ -r $fname -a -w $fname -a -x $fname ]echo read,write and execute permissions allowed

elseecho read,write and execute permissions denied

fielse

echo Improper file namefi

Shell Programming Ver 4.0 58

Shell Programming (contd.)

Case control statementUsed to select form several possible alternatives

case value inchoice1)

do this;;

choice2)do this;;

*)do this;;

esac

Shell Programming Ver 4.0 59

Shell Programming (contd.)

Case control statement# example case - esac controlecho “Enter 1 2 or 3: \c”read num

case $num in1)echo you entered one

;;2)echo you entered two

;;3)echo you entered three

;;*)echo only 1 or 2

;;esac

Shell Programming Ver 4.0 60

Shell Programming (contd.)

Case control statement# Usage: prgname <name >

# name sam tom harry john

case $1 in

sam | tom) echo You have permissions to read only

;;

harry | john) echo You can read and write

;;

*)echo Permission denied

;;

esac

Shell Programming Ver 4.0 61

Shell Programming (contd.)

Case control statementecho Enter any alphabet

read char

case $char in

[a-z])echo You entered lower case letter

;;

[A-Z])echo You entered Upper case letter

;;

?)echo You have entered a special symbol

;;

*)echo error

;;

esac

Shell Programming Ver 4.0 62

Shell Programming (contd.)

case - esac statementThe case can be in any order

The value portion of the case statement can be A shell variable

A shell script argument

Out put of a command

Example case ‘who am i | cut -f1’ in

There cannot be a choice in case

$i -gt 50) # error

Shell Programming Ver 4.0 63

Shell Programming (contd.)

ExercisesAn integer is entered through a key board

Find out if it is odd or even

Write a shell script which receives any year Determine if it is a leap year or not Hint A year is a leap year

If it is divisible 4 but not by 100except that years are divisible by 400

Write a shell script that accepts the login name Displays the terminal the user has logged onAppend this information in a log file

Shell Programming Ver 4.0 64

Shell Programming (contd.)

Exercises

Write a shell script that displays messages

Good morning / afternoon / evening

Write a menu driven program that has the following

menus

Contents of /etc/passwd file

List of all the users who have logged on

Present working directory

The data and time in a proper format

exit

Shell Programming Ver 4.0 65

Shell Programming (contd.)

Loop control

To repeat a set of instructions either

A specified number of times or

Until a particular condition occurs

The shell provides three methods

for statement

while statement

until statement

Shell Programming Ver 4.0 66

Shell Programming (contd.)

Loop control# calculation of simple interest

count=1

while [ $count -le 3 ]

do

echo “\nEnter p,n,r\c”

read p n r

si=‘echo $p \* $n \* $r /100 | bc‘

echo Simple interest = Rs.$si

count=‘expr $count + 1‘

done

Shell Programming Ver 4.0 67

Shell Programming (contd.)

Loop control

The control command can be any of the valid unix

command

while [ $# -le 5 ]

while who | grep $logname

while [ -r $file -a -w $file ] etc . . .

The statements with in the loop may be

A single command

Group of commands

They must be put in between do and done

Shell Programming Ver 4.0 68

Shell Programming (contd.)

Loop control

The loop counter can be a real number

count=20.0

while [ $count -ge 10.0 ]

do

# do this

count=‘echo $count -0.1 | bc‘

done

Shell Programming Ver 4.0 69

Shell Programming (contd.)

Loop control

Example

# usage prname <username>

if [ $# -lt 1 ]

then

echo Improper usage

echo correct usage is: $0 username

exit

fi

logname=$1

time=0

Shell Programming Ver 4.0 70

Shell Programming (contd.)

Loop control

while truedo

who | grep “$logname” > /dev/nullif[$? = 0 ]then

echo $logname has logged inif[$time -ne 0 ]

then echo He has logged $time min latefi

exitelse

time=‘expr $time + 1‘ sleep 60

fidone

Shell Programming Ver 4.0 71

Shell Programming (contd.)

Internal Field separator ( IFS )

It is a system variable

By default it value is space, tab and a new line

The IFS can be changed to any value

The program must reset it to the default value

Example

To read the contents of /etc/passwd file

The field separator used is :

Shell Programming Ver 4.0 72

Shell Programming (contd.)

Internal Field separator ( IFS )# other lines for error checkinglogname=$1line=‘grep $logname /etc/passwd`oldifs=“$IFS”IFS=:set $lineclearecho User = $1echo UID = $3echo GID = $4echo Default working directory = $6

Shell Programming Ver 4.0 73

Shell Programming (contd.)

until loopExecutes the instructions between do and done till

The exit status of the command is false Terminates when it becomes true

# printing numbers using while

i=1

while [ $i -le 10 ]

do

echo $1

i=‘expr $i + 1‘

done

Shell Programming Ver 4.0 74

Shell Programming (contd.)

until loop

# printing numbers using until

i=1

until [ $i -gt 10 ]

do

echo $1

i=‘expr $i + 1‘

done

Shell Programming Ver 4.0 75

Shell Programming (contd.)

for loopAllows to specify a list of values which the

Control variable can take

The loop is executed for each value in the list

for control-variable in value1 value2 value3. . .

do

command1

command2

command3

done

Shell Programming Ver 4.0 76

Shell Programming (contd.)

for loopfor name in sam tom john kate

do

echo $name

done

sam

tom

john

kate

Shell Programming Ver 4.0 77

Shell Programming (contd.)

for loop for command line arguments# $* can also be used as - for words in $*

for words

do

echo $words

done

# To print names of all sub-directoriesfor entry in *do

if[ -d $entry ]then

echo $entryfi

done

Shell Programming Ver 4.0 78

Shell Programming (contd.)

for loopThe values that the control variable takes can

Be mentioned immediately after the in keyword Taken from the shell script argument

for var in $* or for var Take filenames from a directory

for file in *.c

do

mv $file $file.cpp

done

Shell Programming Ver 4.0 79

Shell Programming (contd.)

for loop

The control variable can take the values from a shell

name=“sam tom john tim kate”

for words in $name

do

echo $words

done

Shell Programming Ver 4.0 80

Shell Programming (contd.)

for loop

The control variable can take values

From the output of a command

for cmd in ‘cat commandlist‘

do

man $cmd >>helpfile

done

Shell Programming Ver 4.0 81

Shell Programming (contd.)

break statementWhen the key word break is encountered the control

Automatically passes to the first statement after the loop

i=1 j=1while [ $i -le 100 ]do

while [ $j -lt 200 ]do

if [ $j -eq 150 ]break # break2 to break from outer loop

fij=‘expr $j + 1‘

donej=‘expr $j + 1‘

done

Shell Programming Ver 4.0 82

Shell Programming (contd.)

continue statement

When the key word continue is encountered the control

Automatically passes to the beginning of the loop

Both break and continue can be used for

While loops

for loops

until loops

If there are three nested loops

continue3 will take the control to the outermost loop

Shell Programming Ver 4.0 83

Shell Programming (contd.)

Exercise Write a program to count the number of

lines and words supplied at standard input

Write a program that takes a pathname as input Creates the directories if not already present Changes to the last directory in the list

Two numbers are entered, Write a shell script to find The value of one number raised to the power of other number

Write shell scripts that works similarly to head command tail command and more command

Shell Programming Ver 4.0 84

Shell Programming (contd.)

ExerciseWrite a program to print all the prime numbers

Between 1 to 500 Use break and continue

Write a program to generate all possible combinations of

a b cWrite a script to print the list of files you have with

Only Read permissions Read and write permissions Read write and execute permissions

It must be a menu driven program

Shell Programming Ver 4.0 85

Shell Programming (contd.)

Metatcharacters

Characters with special significance

Also called as regular expressions

Type Metacharacters

Filename substitution ? * [...] [!...]

I/O redirection > < >> << m> m>&n

Process execution ; ( ) & && ||

Quoting metacharacters \ “ “ ‘ ‘ ` `

Positional parameters $1...$9

Special Characters $0 $* $@ $# $! $$ $-

Shell Programming Ver 4.0 86

Shell Programming (contd.)

Metatcharacters

File Name Substitution

? Stands for any one character

* A wild card character

Represents any combination of any number of characters

When mentioned with any command it represents

- A complete list of all files in current directory

- Except Hidden files that start with a period ( . )

Shell Programming Ver 4.0 87

Shell Programming (contd.)

Metatcharacters

File Name Substitution

[...] The shell has a choice of any one character

from the list

[!...] The shell has a choice of any one characters

not in list

Examples

ls a* ls ??

ls a?b? ls [kdpe]*

ls [c-fmpv-z]* ls [!d-g]*

Shell Programming Ver 4.0 88

Shell Programming (contd.)

Metatcharacters

I/O Redirection

Specify from where the input must be picked up and sent

Examples

cat file1 > out_file cat file2 >> out_file

cat < file2 >> out_file cat << stop

2 > errors time ls > myfile 2 > &1

Shell Programming Ver 4.0 89

Shell Programming (contd.)

Metatcharacters

Process execution

Example

ls -l ; who ; banner Hello ( cd mydir ; pwd )

sort file1 > file2 & command1 && command2

command1 || command2

$ grep sam file1 || grep sam addfile && cat a file

Shell Programming Ver 4.0 90

Shell Programming (contd.)

Metatcharacters

Quoting

\ Takes away the special significance of the

character

‘ ‘ (single quotes )Takes every enclosed character

literally

` ` (back quotes ) Replaces the command they

enclosed with its out put

“ “ Certain metacharacters are valid inside the quote

$ \ ` `

Shell Programming Ver 4.0 91

Shell Programming (contd.)

Metatcharacters

Shell variables

$1 to $9 Shell variables

$$ PID of the current shell

$? Exit status of the last executed

command

$! PID of the last background process

$- Current Shell settings

Shell Programming Ver 4.0 92

Shell Programming (contd.)

Metatcharacters

Shell variables

$# Total number of Positional parameters

$0 Name of the command being executed

$* List of all shell arguments

$@ Similar to $* , Yields each argument

separately when enclosed in double quotes

$! PID of the last background process

Shell Programming Ver 4.0 93

Shell Programming (contd.)

Metatcharacters

Shell variables

# pgrname file1 file2 file3 . . .cat “$*”cat “$@”

pgrname f1 f2 f3

cat “f1 f2 f3”

cat “f1” “f2” “f3”

Shell Programming Ver 4.0 94

Shell Programming (contd.)

Metatcharacters

Debugging a Script

Add the the following statement at the beginning of the script

set -vx

v Ensures that each line is displayed before

execution

x Ensures that command along with that

argument value is also displayed

$ echo $- Displays which options are set

set + vx Unsets the options

Shell Programming Ver 4.0 95

Shell Programming (contd.)

getopts command

# Usage prgname [-a/b ]

getopts ab choice

case $choice in

a)echo You entered a

;;

b)echo You entered b

;;

?)echo error

Shell Programming Ver 4.0 96

Shell Programming (contd.)

getopts command

On execution of the script

Accepts a single character option from the command line

The option must be preceded by - (minus sign )

getopts reads the options and decides if it is valid or not

If found valid it stores the value in the variable

If found invalid stores a “ ? “ in the variable

getopts also flashes an error message