COMP 121-401: UNIX Programming
Shells Scripts
Andrew Nashel
[email protected]
Department of Computer Science
February 6, 2004
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Course topics
• Shell scripts
• Homework
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Shells scripts
Any collection of shell commands can be
stored in a file called a shell script. Scripts
have variables and flow control statements
like other programming languages.
There are two popular classes of shells:
C shell (csh) and variants (tcsh)
Bourne shell (sh) and variants (bash, ksh)
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Invoking scripts
There are two ways to launch scripts:
1) Direct interpretation
csh scriptfile [args …]
2) Indirect interpretation
The first line of the file must be
#!/bin/csh
and the file must be executable.
C Shell
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Variables
To set variables:
set X [= value]
Variable contents are accessed using ‘$’:
echo $PATH
To count the number of variable elements:
echo $#Y
C Shell
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Variables cont’d
To create lists:
set Y = (abc 1 123)
To set a list element:
set Y[2] = 3
To view a list element:
echo $Y[2]
C Shell
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Command arguments
A shell script to swap files:
#! /bin/csh –f
set tmp = $argv[1]
cp $argv[2] $argv[1]
cp $tmp $argv[2]
The number of arguments to a script:
$#argv
C Shell
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
if-then-else
if ( expr ) simple-command
if ( expr ) then
commandlist-1
[else
commandlist-2]
endif
C Shell
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
if-then-else cont’d
An example:
if ($#argv <> 2) then
echo “we need two parameters!“
else
set name1 = $argv[1]
set name2 = $argv[2]
endif
C Shell
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Loops
while ( expr )
commandlist
end
foreach var ( worddlist )
commandlist
end
C Shell
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
switch
switch ( str )
case string1:
commandlist1
breaksw
case string2:
commandlist2
breaksw
default
commandlist
endsw
C Shell
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
goto (Considered harmful!)
To jump unconditionally:
goto label
A label is a line such as:
label:
The classic paper on why not to use goto:
Go To Statement Considered Harmful
Edsger W. Dijkstra, CACM, March 1968
C Shell
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
An example script
#! /bin/csh -f
foreach name ($argv)
if ( -f $name ) then
echo -n "delete the file '${name}' (y/n/q)?"
else
echo -n "delete the entire dir '${name}' (y/n/q)? "
endif
set ans = $<
switch ($ans)
case n: continue
case q: exit
case y: rm -r $name; continue
endsw
end
C Shell
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Homework
Due Monday:
Write a shell script that reads a file and
replaces a particular text string with another,
all input given interactively.
Hint: Use sed for text replacement.
This is your final graded assignment!
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Homework cont’d
Example:
$ ./myscript
File to read: news.txt
Search text: Duke
Replacement text: Dookie
Dookie University
Department of Mathematics
Weekly Calendar
…
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Hmmmm.
Okay, shell scripts are useful,
but a little boring.
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
COMP 121-401: UNIX Programming
Unix Games!
Andrew Nashel
[email protected]
Department of Computer Science
February 6, 2004
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
SpaceWar
SpaceWar may be the
most important
computer game ever.
The first version was
developed for the PDP-1
at MIT in 1960. The
game has been under
essentially constant
development since.
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
SpaceWar cont’d
The first CRT display was a converted
oscilloscope used to play SpaceWar.
The first trackball (and thus, the first
mouse) was a SpaceWar control at
MIT. It is said that Ken Thompson
salvaged a PDP-1 and created a new
operating system, now called UNIX, so
that he could play SpaceWar.
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Spacewar cont’d
The PDP-1
Real 133+ gamers
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Nethack
A Rogue-like classic dungeon crawl game;
retrieve the Amulet of Yendor!
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
XPilot
The classic multiplayer 2D shooter.
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
XBill
Whack the computer
hacker and free the
computers from the
awful virus!
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Xmame
Multiple Arcade Machine Emulator
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Xconq
A general purpose strategy game.
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Tux Racer
Be the penguin.
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Freeciv
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
FlightGear
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
BZFlag
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
COMP 121-401: UNIX Programming
UNC Games!
Andrew Nashel
[email protected]
Department of Computer Science
February 6, 2004
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Adventure
Warren Robinett, a former UNC-CS
professor, wrote Adventure, the first
action-adventure video game, in 1978
and it sold over 1 million copies.
He also founded The
Learning Company for
educational software.
It included the
first easter egg!
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Ratchet and Clank
Max Garber, UNC ’02, works at Insomnic Games, Los
Angeles
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Buffy and Wrath
Stephan Sherman and Vince Scheib, ’02 work for The
Collective in Newport Beach, CA
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Midnight Club 2
Andrew Zaferakis, UNC ’02, works for Rockstar San
Diego
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL
Vicious Cycle
Greg Coombe won’t ever graduate.
The UNIVERSITY of NORTH CAROLINA at CHAPEL HILL