60
CSCI 330 THE UNIX SYSTEM C Shell Programming

CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

Embed Size (px)

Citation preview

Page 1: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

CSCI 330THE UNIX SYSTEM

C Shell Programming

Page 2: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

STEPS TO CREATE SHELL PROGRAMS

Specify shell to execute program Script must begin with #! (pronounced

“shebang”)to identify shell to be executed

Examples:#! /bin/sh (defaults to bash)#! /bin/bash#! /bin/csh#! /usr/bin/tcsh

Make the shell program executable Use the “chmod” command to make the

program/script file executable2

CS

CI 330 - T

he UN

IX S

ystem

Page 3: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: “HELLO” SCRIPT

#! /bin/csh

echo "Hello $USER"

echo "This machine is `uname -n`"

echo "The calendar for this month is:"

cal

echo "You are running these processes:"

ps

3

CS

CI 330 - T

he UN

IX S

ystem

Page 4: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE SCRIPT OUTPUT

% chmod u+x hello

% ./hello

Hello ege!

This machine is turing

The calendar for this month is

February 2008

S M Tu W Th F S

1 2 3 4 5 6 7

8 9 10 11 12 13 14

15 16 17 18 19 20 21

22 23 24 25 26 27 28

You are running these processes:

PID TTY TIME CMD

24861 pts/18 0:00 hello.csh

24430 pts/18 0:00 csh4

CS

CI 330 - T

he UN

IX S

ystem

Page 5: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

SHELL LOGIC STRUCTURES

Basic logic structures needed for program development:

Sequential logic User input Decision logic Looping logic Case logic

5

CS

CI 330 - T

he UN

IX S

ystem

Page 6: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

INPUT TO A C SHELL SCRIPT

Reading/prompting for user input Providing input as command line arguments Accessing contents of files

6

CS

CI 330 - T

he UN

IX S

ystem

Page 7: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

READING USER INPUT WITH $<

Use a special C shell variable: $<

Reads a line from terminal (stdin) up to, but not including the new line

7

CS

CI 330 - T

he UN

IX S

ystem

Page 8: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: ACCEPTING USER INPUT

#! /bin/csh

echo "What is your name?"

set name = $<

echo Greetings to you, $name

echo "See you soon"

8

CS

CI 330 - T

he UN

IX S

ystem

Page 9: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: ACCEPTING USER INPUT

% chmod u+x greetings

% ./greetings

What is your name?

Laura Flowers

Greetings to you, Laura Flowers

See you soon

9

CS

CI 330 - T

he UN

IX S

ystem

User entered Laura Flowers

Page 10: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

COMMAND LINE ARGUMENTS

Use arguments to modify script behavior

command line arguments become positional parameters to C shell script

positional parameters are numbered variables: $1, $2, $3 …

10

CS

CI 330 - T

he UN

IX S

ystem

Page 11: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

COMMAND LINE ARGUMENTS

Meaning$0 name of the script$1, $2 first and second parameter${10} 10th parameter

{ } prevents “$1” misunderstanding

$* all positional parameters$#argv the number of arguments

11

CS

CI 330 - T

he UN

IX S

ystem

Page 12: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: COMMAND LINE ARGUMENTS

#! /bin/csh

# Usage: greetings name1 name2

# Input: name1 and name2

echo $0 to you $1 $2

echo Today is `date` $1 $2

echo Good Bye $1 $2

12

CS

CI 330 - T

he UN

IX S

ystem

Page 13: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: COMMAND LINE ARGUMENTS

% chmod u+x greetings

% ./greetings Mark Flowers

./greetings to you Mark Flowers

Today is Mon Feb 16 14:18:03 CST 2008

Good Bye Mark Flowers

13

CS

CI 330 - T

he UN

IX S

ystem

$0 => greetings$1 => Mark

$2 => Flowers

Page 14: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

DECISION LOGIC

if Statement: simplest forms

if ( expression ) command

if ( expression ) then

command(s)

endif

14

CS

CI 330 - T

he UN

IX S

ystem

Page 15: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

DECISION LOGIC

if-then-else Statement

if ( expression ) then

command(s)

else

command(s)

endif

15

CS

CI 330 - T

he UN

IX S

ystem

Page 16: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

DECISION LOGIC

if-then-else Statement

if ( expression ) then

command(s)

else if ( expression ) then

command(s)

else

command(s)

endif

16

CS

CI 330 - T

he UN

IX S

ystem

Page 17: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

BASIC OPERATORS IN EXPRESSIONS

Meaning( ) grouping! Logical “not”

> >= < <= greater than, less than

== != equal to, not equal to

|| Logical “or”&& Logical “and”

17

CS

CI 330 - T

he UN

IX S

ystem

Page 18: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXPRESSION EXAMPLES

if ( $1 == “next” ) echo $2

if ( $#argv != 0 ) then

endif

if ( $#argv > 0 && $#argv < 5) then

endif

18

CS

CI 330 - T

he UN

IX S

ystem

Page 19: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: COMMAND LINE ARGUMENTS

#! /bin/csh

if ( $#argv == 0 ) then

echo -n "Enter time in minutes: "

@ min = $<

else

@ min = $1

endif

@ sec = $min * 60

echo “$min minutes is $sec seconds”

19

CS

CI 330 - T

he UN

IX S

ystem

Page 20: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: READING FILE CONTENTS

#! /bin/csh# Usage: lookup nameOrNumberset list = "users.txt"if ( $#argv == 0 ) then echo -n "Enter name OR z-id: " set name = $<else set name = $*endifgrep -i "$name" $listif ( $status ) echo "$name not found"

20

CS

CI 330 - T

he UN

IX S

ystem

Page 21: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

FILE TESTING OPERATORS

Syntax: if ( -opr filename )

21

CS

CI 330 - T

he UN

IX S

ystem

opr Meaning

r Read access

w Write access

x Execute access

e Existence

z Zero length

f Ordinary file

d directory

Page 22: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: FILE TESTING

if ( -e $1 ) then

echo $1 exists

if ( -f $1 ) then

echo $1 is an ordinary file

else

echo $1 is NOT ordinary file

endif

else

echo $1 does NOT exist

endif22

CS

CI 330 - T

he UN

IX S

ystem

Page 23: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

C SHELL LOOPING CONSTRUCTS

predetermined iterationsrepeatforeach

condition-based iterationswhile

23

CS

CI 330 - T

he UN

IX S

ystem

Page 24: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

FIXED NUMBER ITERATIONS

Syntax:

repeat number command

executes “command” “number” times

Examples:repeat 5 ls

repeat 2 echo “go home”

24

CS

CI 330 - T

he UN

IX S

ystem

Page 25: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

THE FOREACH STATEMENT

foreach name ( wordlist )

commands

end

wordlist is:list of words, ormulti-valued variable

each time through, foreach assigns the next item in wordlist to the variable $name

25

CS

CI 330 - T

he UN

IX S

ystem

Page 26: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: FOREACH STATEMENT

foreach word ( one two three )

echo $word

end

or

set list = ( one two three )

foreach word ( $list )

echo $word

end26

CS

CI 330 - T

he UN

IX S

ystem

Page 27: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

LOOPS WITH FOREACH useful to process result of command,

one at a time

Example:#! /bin/csh@ sum = 0foreach file (`ls`) set size = `cat $file | wc -c` echo "Counting: $file ($size)" @ sum = $sum + $sizeendecho Sum: $sum 27

CS

CI 330 - T

he UN

IX S

ystem

Page 28: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

THE WHILE STATEMENT

while ( expression )

commands

end

use when the number of iterations is not known in advance

execute ‘commands’ when the expression is true

terminates when the expression becomes false

28

CS

CI 330 - T

he UN

IX S

ystem

Page 29: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: WHILE

#! /bin/csh

@ var = 5

while ( $var > 0 )

echo $var

@ var = $var – 1

end

29

CS

CI 330 - T

he UN

IX S

ystem

Page 30: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: WHILE

#! /bin/csh

echo -n "Enter directory to list: "

set dirname = $<

while ( ! -d $dirname )

echo "$dirname is not directory"

echo -n "Enter directory to list: "

set dirname = $<

end

ls $dirname

30

CS

CI 330 - T

he UN

IX S

ystem

Page 31: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

LOOP CONTROL

break

ends loop, i.e. breaks out of current loop

continue

ends current iteration of loop, continues with next iteration

31

CS

CI 330 - T

he UN

IX S

ystem

Page 32: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

LOOP CONTROL EXAMPLE

#! /bin/csh

while (1)

echo -n "want more? "

set answer = $<

if ($answer == "y") echo "fine"

if ($answer == "n") break

if ($answer == "c") continue

echo "now we are at the end"

end

32

CS

CI 330 - T

he UN

IX S

ystem

Page 33: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

LOOP CONTROL EXAMPLE

#! /bin/csh

while ( 1 )

echo -n "Enter directory to list: "

set dirname = $<

if ( -d $dirname ) break

echo "$dirname is not directory"

end

ls $dirname

33

CS

CI 330 - T

he UN

IX S

ystem

Page 34: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

THE SWITCH STATEMENT

Use when a variable can take different values Use switch statement to process different

cases (case statement)

Can replace a long sequence of if-then-else statements

34

CS

CI 330 - T

he UN

IX S

ystem

Page 35: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

THE SWITCH STATEMENT

switch ( string )

case pattern1:

command(s)

breaksw

case pattern2:

command(s)

breaksw

endsw

35

CS

CI 330 - T

he UN

IX S

ystem

C shell compares ‘string’ to each ‘pattern’ until it finds a match

When a match is found, execute the command(s)

… until breaksw

Page 36: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

THE SWITCH STATEMENT

switch (string)case pattern1:

command(s)breakswcase pattern2:

command(s)breaksw default:

command(s)breaksw

endsw36

CS

CI 330 - T

he UN

IX S

ystem

When a match is not found, execute the commands following the default label

Page 37: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: SWITCH

switch ($var) case one: echo it is 1 breaksw case two: echo it is 2 breaksw default: echo it is $var breakswendsw

37

CS

CI 330 - T

he UN

IX S

ystem

Page 38: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

THE SWITCH STATEMENT

if no pattern matches and there is no default, then nothing gets executed

do not omit the breaksw statement !If you omit the breaksw statement, all the

commandsunder the next case pattern are executed until abreaksw or endsw statement is encountered

pattern may contain wildcards:*, ?, []

38

CS

CI 330 - T

he UN

IX S

ystem

Page 39: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: SWITCH GREETING#! /bin/csh# Usage: greeting name# examines time of day for greetingset hour=`date`switch ($hour[4]) case 0*: case 1[01]*: set greeting=morning ; breaksw case 1[2-7]*: set greeting=afternoon ; breaksw default: set greeting=eveningendswecho Good $greeting $1 39

CS

CI 330 - T

he UN

IX S

ystem

Page 40: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE C SHELL PROGRAM

AVAILABLE OPTIONS

*******************

[1] Display today's date

[2] How many people are logged on

[3] How many user accounts exist

[4] Exit

Enter Your Choice [1-4]:

40

CS

CI 330 - T

he UN

IX S

ystem

Page 41: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

USERUTIL SHELL SCRIPT 1 OF 2

#! /bin/csh

# Usage: userutil

while (1)

echo "AVAILABLE OPTIONS"

echo "*******************"

echo "[1] Display today's date"

echo "[2] How many people are logged on"

echo "[3] How many user accounts exist"

echo "[4] Exit"

echo "Enter Your Choice [1-4]:"

41

CS

CI 330 - T

he UN

IX S

ystem

Page 42: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

USERUTIL SHELL SCRIPT 2 OF 2 set answer = $<

switch ($answer) case "1": echo `date`; breaksw case "2": echo `users | wc -w` users are logged in breaksw case "3": echo `cat /etc/passwd | wc -l` users exists breaksw case "4": echo "BYE" break breaksw endswend # end of while

42

CS

CI 330 - T

he UN

IX S

ystem

Page 43: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

ADVANCED C SHELL PROGRAMMING

Quoting Here Debugging Trapping Signals

Functions ? calling other scripts exec, source, eval

43

CS

CI 330 - T

he UN

IX S

ystem

Page 44: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

QUOTING

mechanism for marking a section of a command for special processing:

command substitution: `...` double quotes: “…“ single quotes: ‘…‘ backslash: \

44

CS

CI 330 - T

he UN

IX S

ystem

Page 45: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

DOUBLE QUOTES

prevents breakup of string into words turn off the special meaning of most wildcard

characters and the single quote $ character keeps its meaning ! history references keeps its meaning

Examples:echo "* isn't a wildcard inside quotes"echo "my path is $PATH"

45

CS

CI 330 - T

he UN

IX S

ystem

Page 46: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

SINGLE QUOTES

wildcards, variables and command substitutions are all treated as ordinary text

history references are recognized

Examples:echo '*'echo '$cwd' echo '`echo hello`' echo 'hi there !'

46

CS

CI 330 - T

he UN

IX S

ystem

Page 47: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

BACKSLASH

backslash character \treats following character literally

Examples:echo \$ is a dollar signecho \\ is a backslash

47

CS

CI 330 - T

he UN

IX S

ystem

Page 48: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

THE HERE COMMAND

Example:ispell -l << DONEI was running along quite nicelywhen I was acosted by the mail manwhio insisted that my name is Raimundbut I did not believe himDONE 48

CS

CI 330 - T

he UN

IX S

ystem

Command Syntax Meaning

command << keyword Read lines from input until keyword is encountered at the beginning of a line

Page 49: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

DEBUGGING SCRIPTS

% csh –n scriptname parse commands but do not execute them

% csh –v scriptname Display each line of the script before execution

% csh –x scriptname Displays each line of the script after variable

substitutions and before execution

can also be added to shebang line ! 49

CS

CI 330 - T

he UN

IX S

ystem

Page 50: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

TRAPPING SIGNALS

any Unix process can be interrupted by a signal

common signal: ^C typed via keyboard

causes csh to terminate can be “trapped”, i.e. other behavior specified useful for cleanup upon forced exit

50

CS

CI 330 - T

he UN

IX S

ystem

Page 51: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

TRAPPING SIGNAL

Syntax:onintr label

execution continues at label if interrupt signal is received

onintr – ignore interrupt signal

onintr restore previous interrupt signal behavior

51

CS

CI 330 - T

he UN

IX S

ystem

Page 52: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

ONINTR EXAMPLE

#! /bin/csh

onintr label

while (1)

echo “.”

sleep 1

end

label:

echo “signal received”

52

CS

CI 330 - T

he UN

IX S

ystem

Page 53: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

DIVIDE AND CONQUER

how to modularize a shell script call Unix commands and utilities

call other scripts as subshell sourced in place

evaluate strings to commands

53

CS

CI 330 - T

he UN

IX S

ystem

Page 54: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

CALLING OTHER SCRIPTS

as subshell, via: csh scriptname

scriptname

subshell does not see current shell’s variables

subshell sees current environment variables

54

CS

CI 330 - T

he UN

IX S

ystem

Page 55: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: OUTER

#! /bin/csh

set var = "outer"

setenv VAR "outer"

echo "outer: $var $VAR"

csh inner

echo "outer: $var $VAR"55

CS

CI 330 - T

he UN

IX S

ystem

Page 56: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: INNER

#! /bin/csh

if ( ! $?var ) set var = "unknown"

echo "inner: $var $VAR"

set var = "inner"

setenv VAR "inner"

echo "inner: $var $VAR"

56

CS

CI 330 - T

he UN

IX S

ystem

Page 57: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

“SOURCE” OTHER SCRIPT: NO SUBSHELL

#! /bin/csh

set var = "outer"

setenv VAR "outer"

echo "outer: $var $VAR"

source inner

echo "outer: $var $VAR"57

CS

CI 330 - T

he UN

IX S

ystem

Page 58: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

“EXEC” OTHER SCRIPT: NO RETURN

#! /bin/csh

set var = "outer"

setenv VAR "outer"

echo "outer: $var $VAR"

exec ./inner

echo "outer: $var $VAR"58

CS

CI 330 - T

he UN

IX S

ystem

Page 59: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

THE “EVAL” COMMAND

“eval” evaluates string executes resulting string

Example:set x = 23

set y = x

eval echo \$$y

59

CS

CI 330 - T

he UN

IX S

ystem

Page 60: CSCI 330 T HE UNIX S YSTEM C Shell Programming. S TEPS TO C REATE S HELL P ROGRAMS Specify shell to execute program Script must begin with #! (pronounced

EXAMPLE: THE EVAL COMMAND

#!/bin/csh

set A = 1

set B = 2

set C = 3

foreach i (A B C)

eval echo \$$i

end

60

CS

CI 330 - T

he UN

IX S

ystem