0% found this document useful (0 votes)
50 views60 pages

CSCI 330 T Unix S: HE Ystem

This document provides information on creating shell programs using the C shell (csh) in UNIX. It discusses specifying the shell to execute the program, making shell programs executable, examples of simple shell scripts including output, and various logic structures like user input, decision logic with if/else statements, looping with repeat, foreach, and while, and controlling loops with break and continue.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
50 views60 pages

CSCI 330 T Unix S: HE Ystem

This document provides information on creating shell programs using the C shell (csh) in UNIX. It discusses specifying the shell to execute the program, making shell programs executable, examples of simple shell scripts including output, and various logic structures like user input, decision logic with if/else statements, looping with repeat, foreach, and while, and controlling loops with break and continue.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 60

CSCI 330

THE UNIX SYSTEM


C Shell Programming
STEPS TO CREATE SHELL PROGRAMS
Specify shell to execute program
Script must begin with #! (pronounced shebang)
to identify shell to be executed

CSCI 330 - The UNIX System


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 executable
2
EXAMPLE: HELLO SCRIPT
#! /bin/csh
echo "Hello $USER"

CSCI 330 - The UNIX System


echo "This machine is `uname -n`"
echo "The calendar for this month is:"
cal
echo "You are running these processes:"
ps

3
EXAMPLE SCRIPT OUTPUT
% chmod u+x hello
% ./hello
Hello ege!

CSCI 330 - The UNIX System


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 4
24430 pts/18 0:00 csh
SHELL LOGIC STRUCTURES
Basic logic structures needed for program
development:

CSCI 330 - The UNIX System


Sequential logic
User input
Decision logic
Looping logic
Case logic

5
INPUT TO A C SHELL SCRIPT
Reading/prompting for user input
Providing input as command line arguments

CSCI 330 - The UNIX System


Accessing contents of files

6
READING USER INPUT WITH $<
Use a special C shell variable:
$<

CSCI 330 - The UNIX System


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

7
EXAMPLE: ACCEPTING USER INPUT
#! /bin/csh
echo "What is your name?"

CSCI 330 - The UNIX System


set name = $<
echo Greetings to you, $name
echo "See you soon"

8
EXAMPLE: ACCEPTING USER INPUT
% chmod u+x greetings
% ./greetings
User entered

CSCI 330 - The UNIX System


What is your name?
Laura Flowers
Laura Flowers
Greetings to you, Laura Flowers
See you soon

9
COMMAND LINE ARGUMENTS
Use arguments to modify script behavior

CSCI 330 - The UNIX System


command line arguments become
positional parameters to C shell script

positional parameters are numbered variables:


$1, $2, $3

10
COMMAND LINE ARGUMENTS
Meaning
$0 name of the script

CSCI 330 - The UNIX System


$1, $2 first and second parameter
${10} 10th parameter
{ } prevents $1 misunderstanding
$* all positional parameters
$#argv the number of arguments

11
EXAMPLE: COMMAND LINE ARGUMENTS
#! /bin/csh
# Usage: greetings name1 name2

CSCI 330 - The UNIX System


# Input: name1 and name2
echo $0 to you $1 $2
echo Today is `date` $1 $2
echo Good Bye $1 $2

12
EXAMPLE: COMMAND LINE ARGUMENTS

$0 => greetings
$1 => Mark

CSCI 330 - The UNIX System


$2 => Flowers
% 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
DECISION LOGIC
if Statement: simplest forms

CSCI 330 - The UNIX System


if ( expression ) command

if ( expression ) then
command(s)
endif

14
DECISION LOGIC
if-then-else Statement

CSCI 330 - The UNIX System


if ( expression ) then
command(s)
else
command(s)
endif

15
DECISION LOGIC
if-then-else Statement

CSCI 330 - The UNIX System


if ( expression ) then
command(s)
else if ( expression ) then
command(s)
else
command(s)
endif

16
BASIC OPERATORS IN EXPRESSIONS
Meaning
() grouping

CSCI 330 - The UNIX System


! Logical not
> >= < <= greater than, less than
== != equal to, not equal to

|| Logical or
&& Logical and

17
EXPRESSION EXAMPLES
if ( $1 == next ) echo $2

CSCI 330 - The UNIX System


if ( $#argv != 0 ) then

endif

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



endif

18
EXAMPLE: COMMAND LINE ARGUMENTS
#! /bin/csh
if ( $#argv == 0 ) then

CSCI 330 - The UNIX System


echo -n "Enter time in minutes: "
@ min = $<
else
@ min = $1
endif
@ sec = $min * 60
echo $min minutes is $sec seconds

19
EXAMPLE: READING FILE CONTENTS
#! /bin/csh
# Usage: lookup nameOrNumber

CSCI 330 - The UNIX System


set list = "users.txt"
if ( $#argv == 0 ) then
echo -n "Enter name OR z-id: "
set name = $<
else
set name = $*
endif
grep -i "$name" $list
if ( $status ) echo "$name not found" 20
FILE TESTING OPERATORS
Syntax: if ( -opr filename )

CSCI 330 - The UNIX System


opr Meaning
r Read access
w Write access
x Execute access
e Existence
z Zero length
f Ordinary file
d directory
21
EXAMPLE: FILE TESTING
if ( -e $1 ) then
echo $1 exists

CSCI 330 - The UNIX System


if ( -f $1 ) then
echo $1 is an ordinary file
else
echo $1 is NOT ordinary file
endif
else
echo $1 does NOT exist
endif
22
C SHELL LOOPING CONSTRUCTS
predetermined iterations
repeat

CSCI 330 - The UNIX System


foreach

condition-based iterations
while

23
FIXED NUMBER ITERATIONS
Syntax:

CSCI 330 - The UNIX System


repeat number command

executes command number times

Examples:
repeat 5 ls
repeat 2 echo go home

24
THE FOREACH STATEMENT
foreach name ( wordlist )
commands

CSCI 330 - The UNIX System


end

wordlist is:
list of words, or
multi-valued variable
each time through,
foreach assigns the next item in wordlist to the
variable $name
25
EXAMPLE: FOREACH STATEMENT
foreach word ( one two three )
echo $word

CSCI 330 - The UNIX System


end

or

set list = ( one two three )


foreach word ( $list )
echo $word
end
26
LOOPS WITH FOREACH
useful to process result of command,
one at a time

CSCI 330 - The UNIX System


Example:
#! /bin/csh
@ sum = 0
foreach file (`ls`)
set size = `cat $file | wc -c`
echo "Counting: $file ($size)"
@ sum = $sum + $size
end
echo Sum: $sum 27
THE WHILE STATEMENT
while ( expression )
commands

CSCI 330 - The UNIX System


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
EXAMPLE: WHILE
#! /bin/csh
@ var = 5

CSCI 330 - The UNIX System


while ( $var > 0 )
echo $var
@ var = $var 1
end

29
EXAMPLE: WHILE
#! /bin/csh
echo -n "Enter directory to list: "

CSCI 330 - The UNIX System


set dirname = $<
while ( ! -d $dirname )
echo "$dirname is not directory"
echo -n "Enter directory to list: "
set dirname = $<
end
ls $dirname

30
LOOP CONTROL

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

CSCI 330 - The UNIX System


continue
ends current iteration of loop, continues with
next iteration

31
LOOP CONTROL EXAMPLE

#! /bin/csh
while (1)

CSCI 330 - The UNIX System


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
LOOP CONTROL EXAMPLE

#! /bin/csh
while ( 1 )

CSCI 330 - The UNIX System


echo -n "Enter directory to list: "
set dirname = $<
if ( -d $dirname ) break
echo "$dirname is not directory"
end
ls $dirname

33
THE SWITCH STATEMENT
Use when a variable can take different values
Use switch statement to process different cases

CSCI 330 - The UNIX System


(case statement)

Can replace a long sequence of


if-then-else statements

34
THE SWITCH STATEMENT
switch ( string ) C shell compares string
case pattern1: to each pattern until it

CSCI 330 - The UNIX System


finds a match
command(s)
breaksw
case pattern2: When a match is
command(s) found, execute the
command(s)
breaksw
endsw
until breaksw

35
THE SWITCH STATEMENT
switch (string)
case pattern1:

CSCI 330 - The UNIX System


command(s)
breaksw
case pattern2:
command(s)
breaksw
default: When a match is not found,
command(s) execute the commands
following the default label
breaksw
endsw 36
EXAMPLE: SWITCH
switch ($var)
case one:

CSCI 330 - The UNIX System


echo it is 1
breaksw
case two:
echo it is 2
breaksw
default:
echo it is $var
breaksw
endsw 37
THE SWITCH STATEMENT
if no pattern matches and there is no default,
then nothing gets executed

CSCI 330 - The UNIX System


do not omit the breaksw statement !
If you omit the breaksw statement, all the commands
under the next case pattern are executed until a
breaksw or endsw statement is encountered

pattern may contain wildcards:


*, ?, []
38
EXAMPLE: SWITCH GREETING
#! /bin/csh
# Usage: greeting name
# examines time of day for greeting

CSCI 330 - The UNIX System


set 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=evening
endsw
echo Good $greeting $1 39
EXAMPLE C SHELL PROGRAM
AVAILABLE OPTIONS
*******************

CSCI 330 - The UNIX System


[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
USERUTIL SHELL SCRIPT 1 OF 2
#! /bin/csh
# Usage: userutil

CSCI 330 - The UNIX System


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
USERUTIL SHELL SCRIPT 2 OF 2
set answer = $<
switch ($answer)
case "1":

CSCI 330 - The UNIX System


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
endsw
42
end # end of while
ADVANCED C SHELL PROGRAMMING
Quoting
Here

CSCI 330 - The UNIX System


Debugging

Trapping Signals

Functions ?
calling other scripts
exec, source, eval

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

CSCI 330 - The UNIX System


command substitution: `...`
double quotes:
single quotes:
backslash: \

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

CSCI 330 - The UNIX System


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
SINGLE QUOTES
wildcards, variables and command substitutions
are all treated as ordinary text

CSCI 330 - The UNIX System


history references are recognized

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

46
BACKSLASH

backslash character \
treats following character literally

CSCI 330 - The UNIX System


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

47
THE HERE COMMAND
Command Syntax Meaning
command << keyword Read lines from input until keyword is

CSCI 330 - The UNIX System


encountered at the beginning of a line

Example:
ispell -l << DONE
I was running along quite nicely
when I was acosted by the mail man
whio insisted that my name is Raimund
but I did not believe him
DONE 48
DEBUGGING SCRIPTS
% csh n scriptname
parse commands but do not execute them

CSCI 330 - The UNIX System


% 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

49
can also be added to shebang line !
TRAPPING SIGNALS
any Unix process can be interrupted by a signal
common signal:

CSCI 330 - The UNIX System


^C typed via keyboard

causes csh to terminate


can be trapped, i.e. other behavior specified
useful for cleanup upon forced exit

50
TRAPPING SIGNAL
Syntax:
onintr label

CSCI 330 - The UNIX System


execution continues at label if interrupt signal is
received

onintr
ignore interrupt signal

onintr
restore previous interrupt signal behavior
51
ONINTR EXAMPLE
#! /bin/csh
onintr label

CSCI 330 - The UNIX System


while (1)
echo .
sleep 1
end

label:
echo signal received

52
DIVIDE AND CONQUER
how to modularize a shell script
call Unix commands and utilities

CSCI 330 - The UNIX System


call other scripts
as subshell
sourced

in place

evaluate strings to commands

53
CALLING OTHER SCRIPTS
as subshell, via:
csh scriptname

CSCI 330 - The UNIX System


scriptname

subshell does not see current shells variables


subshell sees current environment variables

54
EXAMPLE: OUTER

#! /bin/csh

CSCI 330 - The UNIX System


set var = "outer"
setenv VAR "outer"

echo "outer: $var $VAR"

csh inner

echo "outer: $var $VAR"


55
EXAMPLE: INNER

#! /bin/csh

CSCI 330 - The UNIX System


if ( ! $?var ) set var = "unknown"
echo "inner: $var $VAR"

set var = "inner"


setenv VAR "inner"

echo "inner: $var $VAR"

56
SOURCE OTHER SCRIPT: NO SUBSHELL
#! /bin/csh

CSCI 330 - The UNIX System


set var = "outer"
setenv VAR "outer"

echo "outer: $var $VAR"

source inner

echo "outer: $var $VAR"


57
EXEC OTHER SCRIPT: NO RETURN
#! /bin/csh

CSCI 330 - The UNIX System


set var = "outer"
setenv VAR "outer"

echo "outer: $var $VAR"

exec ./inner

echo "outer: $var $VAR"


58
THE EVAL COMMAND
eval
evaluates string

CSCI 330 - The UNIX System


executes resulting string

Example:
set x = 23
set y = x
eval echo \$$y

59
EXAMPLE: THE EVAL COMMAND
#!/bin/csh
set A = 1

CSCI 330 - The UNIX System


set B = 2
set C = 3
foreach i (A B C)
eval echo \$$i
end

60

You might also like