You are on page 1of 36

`

SILICON DESIGN SOLUTIONS


System Administration Group

UNIX/C-SHELL PERL TRAINING DOCUMENT


Revision 1.0

September 15, 2008


Author: Le Tu Duc

Duc Le

Page 1

9/15/2008

I. UNIX
1. What is UNIX?
-

UNIX is a computer operating system originally developed in 1969 by a


group of AT&T employees at Bell Labs.

Todays UNIX system are splited into various branches, developed over
time by AT&T as well as various commercial venders and non-profit
organizations.

Today, in addition to certified UNIX systems, UNIX-like operating system


such as Linux and BSD are commonly encountered.

Kernel is the central component of the most operating system. Its


responsibilities include managing the systems resources (the
communication between software and hardware components).

As a basic component of an operating system, a kernel provides the


lowest-level abstraction layer for the resources (especially memory,
processors and I/O devices) that application software must control to
perform its function.

Shell acts as an interface between user and kernel.

As a UNIX user, you have a choice of shells available to you. These are
the Bourne shell, the C shell, the Korn shell.

2. Kernel

3. Shell

4. The directory structure

Duc Le

All the files in UNIX are grouped together in the directory structure. The
file-system is arranged in a hierarchical structure, like an inverted tree.
The top of the hierarchy is traditionally called root (written as a slash /)

Example of directory structure:

Page 2

9/15/2008

5. Starting an Unix terminal

Duc Le

Terminal is GUI so that user interacts with system.

Start terminal in UNIX:

Start terminal in Linux:

Page 3

9/15/2008

6. Basic commands
Basic commands in UNIX are: mkdir, cd, cp, mv, rm, cat, touch, vi, ls, du, df, pwd, who,
id, chmod, chown, chgrp, top, rlogin, rsh, ssh, ftp, sftp, clear, echo, setenv, tar, gzip, kill,
history, man.

Duc Le

mkdir: create directory.

cd: change directory

mv: move or rename a file or directory

rm: remove file or directory

cat: concatenate files and print on the standard output

touch: create blank file.

vi: start text editor

ls: list directory contents

pwd: print name of current/working directory

du: estimate file space usage

df: report filesystem disk space usage


Page 4

9/15/2008

who: show who is logged on

id: print real and effective UIDs and GIDs

chmod: change file access permissions

chown: change file owner and group

chgrp: change group ownership

top: display Unix/Linux tasks

rlogin: remote login

rsh: remote shell

ssh: OpenSSH SSH client (remote login program)

ftp: file transfer program

sftp: secure file transfer program

clear: clear the terminal screen

echo: display a line of text

setenv: add or change environment variable

tar: the GNU version of the tar archiving utility

gzip: compress or expand files

kill: terminal a process

history: the history command performs one of several operations


related to recently-executed commands recorded in a history list.

man: format and display the on-line manual pages

 For more detail about above commands, from terminal, type: man <command>
7. VI editor

Duc Le

The VI editor is a screen-based editor used by many Unix users.

Some simple VI commands

enter insert mode, the characters typed in will be inserted after the current cursor
position. If you specify a count, all the text that had been inserted will be repeated
that many times.

Page 5

9/15/2008

move the cursor to the left one character position.

enter insert mode, the characters typed in will be inserted before the current cursor
position. If you specify a count, all the text that had been inserted will be repeated
that many times.

move the cursor down one line

move the cursor up one line.

move the cursor to the right one character position.

replace one character under the cursor. Specify count to replace a number of
characters

undo the last change to the file. Typing u again will re-do the change.

delete character under the cursor. Count specifies how many characters to delete.
The characters will be deleted after the cursor.

:w

Write file

:q

Exit VI editor

II. C-SHELL
1. About C-Shell
-

Duc Le

The C shell (csh) is a developed by Bill Joy for the BSD Unix system. It
was originally derived from the 6th Edition Unix /bin/sh (which was the
Thompson Shell), the predecessor of the Bourne Shell. Its syntax is
modeled after the C programming language. The C shell added many
feature improvements over the Bourne shell, such as aliases and
command history. Today, the original C shell is not in wide use on Unix;
it has been superseded by other shells such as the Tenex C shell (tcsh)
based on the original C shell code, but adding filename completion and
command line editing, comparable with the Korn Shell (ksh), and the
GNU Bourne-Again shell (bash).

Page 6

9/15/2008

The C shell has the typical Unix shell structure: each line of input (or line
of a script file) is interpreted as a separate command to execute, with
backslashes "escaping" newlines where needed (so that multiple input
lines can comprise a single command to be executed).

2. Invoking C-Shell
-

Each time you log in to UNIX, you're placed in an interactive shell


referred to as your login shell. If your login shell is C shell, you can tell by
its command-line prompt: the percent sign (%). The C shell prompt
differs from the dollar sign prompt ($) of the Bourne shell to remind you
that you're using the C shell.
If your login shell is not C shell, and C shell is available on your system,
you can invoke it as an interactive shell from the command line. Even
when you're already running the C shell, there will be times when you
want to launch the C shell again, for example to run a shell script or to
temporarily change the shell's options. To invoke the C shell
interactively, use the following command:
$ csh
%

3. Built-in shell command


Command Description

alias

Define or list a command alias

bg

Background execution

break

Breaking out of a loop

breaksw

Exit from a switch statement

case

Begin a case in switch

cd

Change directory

chdir

Change directory

continue Begin the next loop iteration immediately

Duc Le

default

Label for the default case in switch

dirs

List the directory stack

echo

Echo arguments to standard output

eval

Rescan a line for substitutions

exec

Invoke a new shell

Page 7

9/15/2008

Duc Le

exit

Exit from the current shell

fg

Switch a job to foreground execution

foreach

Looping control statement

glob

Echo arguments to standard output

goto

Alter the order of command execution

hashstat

Print hash table statistics

history

List command history

if

Conditional execution

jobs

List active jobs

kill

Signal a process

limit

Respecify maximum resource limits

login

Invoke the system login procedure

logout

Exit from a login shell

newgrp

Change your group ID

nice

Control background process dispatch priority

nohup

Prevent termination on logout

notify

Request notification of background job status changes

onintr

Process interrupt within a shell script

popd

Return to a previous directory

pushd

Change directory with pushdown stack

rehash

Rehash the directory search path

repeat

Repetitively execute a command

set

Display or change a variable

setenv

Set environment variable

shift

Shift parameters

source

Interpret a script in the current shell

stop

Stop a background job

suspend

Stop the current shell

switch

Conditional execution

time

Time a command

umask

Display or set the process file creation mask

unalias

Delete a command alias

unhash

Disable use of the hash table

unlimit

Cancel a previous limit command

unset

Delete shell variables


Page 8

9/15/2008

unsetenv Delete environment variables


wait

Wait for background jobs to finish

while

Looping control

%job

Foreground execution

Expression evaluation

4. Shell programming
a. Shell script
-

A shell script is simply a text file containing shell commands.

Example:

Create a script ex.csh to print Hello World!:


% vi ex.csh
#!/bin/csh -f
echo Hello world!
~
% chmod +x ex.csh
% ex.csh
Hello World!
%

b. Variable
-

A variable name can consist of only uppercase and lowercase letters and
digits. The name cannot begin with a digit, because names beginning
with a digit are reserved for use by the shell. General usage indicates the
use of all capital letters for the names of environment variables, and all
lowercase letters for local variables, although the shell imposes no such
restriction.

Use the set/unset statement to create/delete local variables and


optionally to assign a value to them. Local variables are known only to
the current shell and are not passed to shell scripts or invoked
commands.

Duc Le

Ex:

Page 9

9/15/2008

set name=a
set name=(a,b,c)
set name[1]=a
unset name
-

Use the setenv statement to create new environment variables.


Environment variables are passed to shell scripts and invoked
commands, which can reference the variables without first defining
them (no setenv statement is required or should be used in a shell script
for passed environment variables you wish to access).

Ex:
setenv $DISPLAY pc150:0.0
setenv $PATH .:/usr/local/bin
unsetenv $DISPLAY

c. Obtaining variable value


Syntax

Meaning

$name

Replaced with the value of name. It is an error if the ${name} variable name is not defined.

Replaced with the value of elements of array variable ${name[n]}name. For n, write an element
$name[n] number, or a range of element numbers in the form m-n. Use -n to substitute elements 1-n, and mto substitute elements m through the end of the array.
$#name Replaced with the number of elements in array variable ${#name}name.
$?name Replaced with 1 if variable name is set, otherwise 0. ${?name}
d. Array variables
-

Assign values to an array variable in one of two waysall at once, or one


at a time. To assign many values at once, use a wordlist argument to the
set command. A wordlist is a parenthesized list of words.

Ex:
set name=(a b c)

=> wordlist

set name[1]=a
set name[2]=b
set name[3]=c

Duc Le

Page 10

9/15/2008

Reference the array variable name without an index, the shell replaces
the reference with a wordlist.

Use the reference $name[*] to obtain all the words of the array without
the surrounding parentheses.

Reference a specific range of elements using the notation $name[m-n],


where m and n are the beginning and ending index numbers.

The special form $name[-n] refers to elements of the array beginning


with the first and extending through n.

The special form $name[n-] refers to the elements of the array beginning
with n and extending through the last.

e. Special read-only variables


Variable Meaning
$0

Replaced with the name of the current shell input file, if known. If unknown, this variable is unset,
and a reference to it is an error.

$?0

Replaced with 1 if $0 is set, otherwise 0.

$1, $2,
...

Replaced with the value of the shell command's first (second, third,_) argument. If used within a
shell script invoked by name, these symbols refer to the command $9 arguments. Up to nine
arguments can be referenced this way. To reference arguments beyond nine, must use the
reference notation $argv[n].

$*

Equivalent to $argv[*]. Replaced with all the shell's arguments.

$$

Replaced with the process number of the parent shell. Used within a shell script, refers to the
process number of the invoking shell.

$<

Replaced with a line of text read from the standard input file.
-

The variables $1, $2, through $9 have special significance when used
inside a shell script, because they refer to the arguments of the
command line that invoked the shell script. The same command
arguments are accessible via the array variable argv. Using the argv
variable, you can refer to all command-line arguments, not just the first
nine. For example, $argv[10] references the tenth argument, and
$argv[$n] references whichever argument is designated by another
variable $n.

f. Operators
- Arithmetic and Logical Operators
Operator Syntax

Duc Le

Operation

Page 11

9/15/2008

~a

Bitwise one's complement. The bits of a are inverted so that 1 yields 0, and 0 yields 1.

!a

Logical negation. If the value of a is zero, the value of the expression is 1; if the value of
a is nonzero, the value of the expression is zero.

a*b

Multiplication. The value of the expression is the arithmetic product of a times b.

a/b

Division. The value of the expression is the integer quotient of a divided by b.

a%b

Remainder. The value of the expression is the remainder from the integer division of a
by b.

a+b

Addition. Yields the sum of a and b.

a-b

Subtraction. Yields the sum of a and -b.

<<

a << b

Left shift. Shifts a left the number of bits specified by b. Equivalent to a 2b.

>>

a >> b

Right shift. Shifts a right the number of bits specified by b. Equivalent to a 2b.

<

a<b

Less than. Yields 1 if a is less than b, otherwise 0.

>

a>b

Greater than. Yields 1 if a is greater than b, otherwise 0.

<=

a <= b

Less than or equal to. Yields 1 if a is not greater than b, otherwise 0.

>=

a >= b

Greater than or equal to. Yields 1 if a is not less than b, otherwise 0.

=~

a =~ b

Pattern matching. Yields 1 if string a matches pattern b.

!~

a !~ b

Pattern matching. Yields 1 if string a does not match pattern b.

==

a == b

String comparison. Yields 1 if a is identical to b, compared as strings.

!=

a != b

String comparison. Yields 1 if string a is not identical to string b.

a|b

Bitwise or. Yields the inclusive-or of a and b.

a^b

Bitwise exclusive-or. Yields the exclusive-or of a and b.

&

a&b

Bitwise and. Yields the and of corresponding bits of a and b.

&&

a && b

Logical and. Yields 1 if a is true and b is true; otherwise 0 if either is false.

||

a || b

Logical or. Yields 1 if either a is true or b is true (or both are true); otherwise 0.

Evaluate an expression and assign the result to a variable, or to an element of an array


@ name=exp variable. The assignment operators +=, -=, *=, /=, %=, <<=, >>=, |=, ^=, and &= are also
supported.
Expression

File testing expressions

Condition When True

-r filename True if file exists and is readable


-w filename True if file exists and is writable
-x filename True if file exists and is executable
-e filename True if file exists
-o filename True if file exists and is owned by the current real user ID
-z filename True if file exists and is zero length
Duc Le

Page 12

9/15/2008

-f filename True if file exists and is a regular file


-d filename True if file exists and is a directory
g. Statements
-

Conditional statements

if

if (expr) then
commands
else if (expr) then
commands
else
commands
endif

switch

switch (string)
case pattern:
commands
default:
commands
endsw
-

Iterative statements

while

while (expr)
commands
end

foreach

foreach name (wordlist)


commands
end
Duc Le

Page 13

9/15/2008

5. Interpreting a script in the current shell


- Use source to read and interpret a script of shell commands within the
current shell environment.
source name
-

For name, provide the filename or pathname of a file containing shell


commands and statements. The shell will search the current directory
path (path variable) for the file if you do not specify a name beginning
with /, ./, or ../.

6. Customizing your shell environment


-

The C shell provides for two initialization scripts, the .cshrc and .login
files.

.cshrc:

You should define command aliases, variable settings, and shell


options in your ~/.cshrc file (~: home directory). It is always
executed before the .login script, and by placing such definitions
in .cshrc, you are assured of having the definitions available in
subshells.
Ex:

if ($?prompt) then
setenv ARCH `arch`
set hostname = `hostname`
set prompt = "`hostname` YOU% "
set history = 100
set savehist = 100
set filec
source ~/.login
source ~/.aliases
mesg n
xhost +
limit coredumpsize 0

Duc Le

Page 14

9/15/2008

endif
-

.login:

This file should contain defined environment variables such as


PATH, JAVAHOME,
Ex:

####################################################
setenv OPENWINHOME /usr/openwin
setenv LD_LIBRARY_PATH /usr/local/lib:$OPENWINHOME/lib:/usr/lib
setenv MANPATH .:/usr/share/man:/usr/openwin/man:/usr/dt/man:/usr/local/man
setenv JAVAHOME /usr/java/
####################################################
stty erase '^H'
stty werase '^?'
set path = ( . \
/usr/java/bin \
$JAVAHOME/bin \
/soft/bin \
/usr/ucb \
/bin /usr/bin /usr/sbin \
/usr/local/bin /usr/local/sbin \
$HOME/bin $JAVAHOME/bin \
$OPENWINHOME/bin \
/usr/ccs/bin \
/usr/dt/bin \
/opt/Netscape \
/usr/X11R6/bin \
/sbin \
)
Duc Le

Page 15

9/15/2008

####################################################
7. Job control
&

Execute a command in the background

jobs List active background jobs


wait Wait for specified (or all) jobs to finish
kill Send a signal to specified jobs
bg

Resume execution of stopped jobs in the background

fg

Switch background jobs to foreground execution

8. Keyboard shortcut keys


CTRL + B Moves the cursor backward one character.
CTRL + C Cancels the currently running command.
CTRL + D Logs out of the current session.
CTRL + F Moves the cursor forward one character.
CTRL + H Erase one character. Similar to pressing backspace.
CTRL + P Paste previous line and/or lines.
CTRL + S Stops all output on screen (XOFF).
CTRL + Q Turns all output stopped on screen back on (XON).
CTRL + U Erases the complete line.
CTRL + W Deletes the last word typed in. For example, if you typed 'mv file1 file2' this shortcut
would delete file2.
CTRL + Z Cancels current operation, moves back a directory and/or takes the current operation
and moves it to the background.
9. Environment variables
a. PATH: specifies directories to search for commands and programs.
-

Ex: setenv PATH .:/usr/local/bin:/usr/bin:/soft/bin

b. LD_LIBRARY_PATH: is a colon-separated set of directories where libraries


should be searched for first. This is useful when debugging a new library or
using a nonstandard library for special purposes.
-

Duc Le

Ex: setenv LD_LIBRARY_PATH /usr/local/lib: /usr/openwin/lib:/usr/lib

Page 16

9/15/2008

c. DISPLAY: the $DISPLAY environment variable is used to tell a client to which


server it should send its output.
-

Ex: setenv DISPLAY pc150:0.0


In which, pc150 is our machine or which machine that we want to send
output to.

10. xhost, stty commands


a. stty: sets options for a terminal.
-

Ex: stty erase '^H' -> sets the erase key to backspace.

For more detail about this command, type man stty in your terminal.

b. xhost: xhost program is used to add and delete host names or user names to
the list allowed to make connections to the X server.
-

Ex:

xhost + hostname: Adds hostname to X server access


control list.
xhost - hostname: Removes hostname from X server access
control list.
xhost + : Turns off acccess control (all remote hosts will have
access to X server)
xhost - : Turns access control back on.

For more detail about this command, type man xhost in your terminal.

11. Autocomplete mode


-

In C-shell, we can set autocomplete mode to complete our typing.

To allow autocomplete mode, in terminal, we do: % set filec. From now,


we can use Esc (Unix) or Tab (Linux) to complete our typing.

Normally, we put above command in ~/.cshrc to enable at first then we


dont have to set it again.

III. PERL
1. What is Perl?
- Perl is the power and flexibility of high-level programming languages
- Contain control structures and operators similar to C programming
- Ability to write useful programs in a very short time.
- Perl is freeware.
Duc Le

Page 17

9/15/2008

2. Perl script
- A Perl program consists of an ordinary text file containing a series of Perl
commands.
Ex:
#!/usr/local/bin/perl
print Hello world!\n;
 \n: new line character.
3. Data types
a. Scalars
-

All numbers and strings are scalars.

The name of a scalar variable consists of the character $ followed by at


least one letter, which is followed by any number of letters, digits, or
underscore characters (that is, the _ character).

All Perl variable names, including scalars, are case sensitive. $Name and
$name, for example, are two completely different quantities.

Perl converts automatically between numbers and strings as required.


Ex:
$a = 2;
$b = 6;
$c = $a . $b; # The "." operator concatenates two ($c = 26)
#strings
$d = $c / 2;
print $d;
yields the result
13

b. Arrays
-

A collection of scalars is an array. An array variable name starts with an


@ sign, while an explicit array of scalars is written as a comma-separated
list within parentheses:
Ex:
@machine = ("vsi100", "vsi101", "vsi102");
print $machine[0]\n;

Duc Le

Page 18

9/15/2008

print $machine[2]\n;
result in:
vsi100
vsi102

Mixing scalar types in an array is not a problem.


Ex:
@mix = (2, How are you?);
print $mix[0]\n;
print $mix[1]\n;
result in:
2
How are you?

c. Associative arrays
-

Associative arrays are lists of values indexed by strings.

An associative array name starts with an % sign.


Ex:
%group = (ns, Network System, is, Intergrated System, hr,
Human Resource);
print $group{ns}\n;
print $group{hr}\n;
Result in:
Network System
Human Resource

d. File handles
- A file handle behaves in many ways like a variable.
- A file handle can be regarded as a pointer to a file from which Perl is to
read or to which it will write. The basic idea is that you associate a

Duc Le

Page 19

9/15/2008

handle with a file or device and then refer to the handle in the code
whenever you need to perform a read or write operation.
- File handles are generally written in all uppercase. Perl has some useful
predefined file handles:
File Handle Points To
STDIN

Standard input, normally the keyboard. Typically contains everything


you enter when running a program.

STDOUT

Standard output, normally the console. Typically stores data that is to


be written to your screen.

STDERR

Device where error messages should be written, normally the console.


Ex:
$input = <STDIN>;
print = $input;
If user types:
Hello world
the screen will dislay:
Hello world
Hello world

4. Operators
a. Arithmetic operators
Operator

Operation

Addition

Subtraction

Multiplication

Division

**

Exponentiation (ex: 9 ** 2 is 81)

Modulus (ex: 7 % 5 is 2)

b. Comparison operators

Duc Le

String operator

Comparison operation

Equivalent numeric operator

lt

Less than

<
Page 20

9/15/2008

gt

Greater than

>

eq

Equal to

==

le

Less than or equal to

<=

ge

Greater than or equal to

>=

ne

Not equal to

!=

cmp

Compare, returning 1, 0, or -1

<=>

Perl compares strings by determining their places in an alphabetical


order. For example, the string aaa is less than the string bbb, because
aaa appears before bbb when they are sorted alphabetically.

c. Logical operators
Operator Name
&&

And

||

Or

Not

and

And

or

Or

not

Not

xor

Xor

d. Some file test operators


Operator Example

Name

Result

-e

-e $a

Exists

True if file named in $a exists

-r

-r $a

Readable

True if file named in $a is readable

-w

-w $a

Writable

True if file named in $a is writable

-d

-d $a

Directory

True if file named in $a is a directory

-f

-f $a

File

True if file named in $a is a regular file

-T

-T $a

Text File

True if file named in $a is a text file

e. Assignment operators

Duc Le

Operator

Operations performed

Assignment only

+=

Addition and assignment

-=

Subtraction and assignment

*=

Multiplication and assignment


Page 21

9/15/2008

/=

Division and assignment

%=

Remainder and assignment

**=

Exponentiation and assignment

&=

Bitwise AND and assignment

|=

Bitwise OR and assignment

^=

Bitwise XOR and assignment

Ex:
$a *= 2 => $a = $a * 2
$a %= 2 => $a = $a % 2
f. Operator precddence
Operator

Operation Performed

++, --

Autoincrement and autodecrement

-, ~, !

Operators with one operand

**

Exponentiation

=~, !~

Pattern-matching operators

*, /, %, x

Multiplication, division, remainder,


repetition

+, -, .

Addition, subtraction, concatenation

<<, >>

Shifting operators

-e, -r, etc.

File-status operators

<, <=, >, >=, lt, le, gt, ge

Inequality-comparison operators

==, !=, <=>, eq, ne, cmp

Equality-comparison operators

&

Bitwise AND

|, ^

Bitwise OR and XOR

&&

Logical AND

||

Logical OR

..

List-range operator

? and :

Conditional operator (together)

=, +=, -=, *=,

Assignment operators

and so on

Duc Le

Comma operator

not

Low-precedence logical NOT

and

Low-precedence logical AND

Page 22

9/15/2008

or, xor

Low-precedence logical OR and XOR

 For
more
operators,
please
refer
http://192.168.100.222/web_books/perl_books/teach_yourself_perl5_21_days/ch
4.htm.
5. Flow control
a. if statement
-

Systax:
if (expr)
{
Statement block
}
elsif (expr)
{
Statement block
}
elsif (expr)
{
Statement block
}
else
{
Statement block
}

Ex:
print Enter your age:;
chop ($age);
if ($age < 18)
{
print "You cannot Vote or have a beer, yet.\n";
}
else
{
print "Go and Vote and then have a beer.\n";
}
Result in:
Enter your age:18

Duc Le

Page 23

9/15/2008

Go and Vote and then have a beer.


b. for statement
-

Syntax:
for ( initialise_expr; test_expr; increment_expr )
{
statement(s);
}

Ex:
for ( $i = 1; $i <= 10; $i++ )
{ # count to 10
print "$i\n";
}
Result in:
1
2
3
4
5
6
7
8
9
10

c. while statement
-

Syntax:
while (expr)
{ # while expression is true execute this block

Duc Le

Page 24

9/15/2008

statement(s);
}
-

Ex:
$i = 1;
while ( $i <= 10 )
{ # count to 10
print "$i\n";
$i++;
}

d. until statement
-

Syntax:
until (expression)
{ # until expression is false execute this block
statement(s);
}

Ex:
i = 1;
until ( $i > 10 )
{ # count to 10
print "$i\n";
$i++;
}

e. foreach statement
- Syntax:
foreach localvar (listexpr)
{
statement_block;
}
Duc Le

Page 25

9/15/2008

 listexpr is any list or array variable, and statement_block is a collection of


statements that is executed every time the loop iterates.
 localvar is a scalar variable that is defined only for the duration of the foreach
statement. The first time the loop is executed, localvar is assigned the value of the
first element of the list in listexpr. Each subsequent time the loop is executed,
localvar is assigned the value of the next element of listexpr.
- Ex:
@words = ("Here", "is", "a", "list.");
foreach $word (@words) {
print ("$word\n");
}
Result in:
Here
is
the
list.
6. Reading from and writing to files
a. Open a file
- Syntax:
open (filevar, filename)


filevar represents the name you want to use in your Perl program
to refer to the file.

filename represents the location of the file on your machine

- Ex:
open (TEMP, temp.txt);
open (TEMP, /tmp/temp.txt);
-

Duc Le

File mode:

Read mode

Open file to read existing contents only

Write mode (>)

Open file to write new contents (overwrite existing contents)


Page 26

9/15/2008

Append mode (>>)

Open file to append contents at end of the file


-

Ex:
open (TEMP, >temp.txt);
open (TEMP, >>temp.txt);

b. Reading from file


-

Once we open file, we are able to read from it.

Ex: a program that reads a file and prints them.


#!/usr/local/bin/perl
if (open(TEMP, "temp.txt")) {
$line = <TEMP>;
while ($line ne "") {
print ($line);
$line = <TEMP>;
}
}

c. Writing to file
-

Once we open file to write/append, we are able to write/append to the


file by specifying the file variable with print function.

Ex:
open (TEMP, >temp.txt) || die (Could not open this file.\n);
print TEMP (Hello world.\n);
Above statement will write to file temp.txt the following content:
Hello world.

d. Closing a file
- When we finish reading or writing a file, we call library function close to
close file.
- Syntax:
close (filevar);
Duc Le

Page 27

9/15/2008

Ex:
close (TEMP);

 Perl automatically closes the file when the program terminates or when we open
another file using a previously defined file variable.
7. Pattern matching
A pattern is a sequence of characters to be searched for in a character string. In Perl,
patterns are normally enclosed in slash characters:
/def/
def is a pattern.
If the pattern is found, a match occurs.
a. The match operators
-

Perl uses =~ operator to test whether a pattern is matched and !~ to test


whether a pattern is not matched.

Ex:
$result = $var =~ /abc/
$var is searched for pattern abc, if abc is found, $result is
assigned a nonzero value, otherwise, $result is set to 0.
$result = $var !~ /abc/
If abc is found, $result is assigned to 0, otherwise, $result is set to
nonzero value.

b. Some special characters in patterns

Duc Le

+: one or more of the preceding characters. Ex: /de+f/ means def, deef,
deeef,...

[ ]: match one of a group of alternatives. Ex: /d[eE]f/ means /def/ or


/dEf/.

*: matches zero or more occurrences of the preceding character. Ex:


/de*f/ means df, def, deef, deeef,

?: matches zero or one occurrence of the preceding character. Ex: /de?f/


matches df or def.

Page 28

9/15/2008

\: escapes sequences for special characters. Ex: /\*/ means * character is


treated normally, not special character.

[0-9]: matches any digit between 0 and 9. [a-z], [A-Z] match any
lowercase letter, uppercase letter.

^ or \A: match at beginning of string only. Ex: /^def/ matches def only if
these are the first three characters in the string.

$ or \Z: match at end of string only. Ex: /def$/ matches def only if these
are the last three characters in the string.

\b: matches on word boundary. /\bdef/ matches only if def is the


beginning of a word. This means that def and defghi match but abcdef
does not. Note that, above pattern will match $defghi because $ is not
assumed to be part of a word, def is the beginning of the word defghi,
and /\bdef/ matches it.

\B: matches inside word. Ex: /\Bdef/ matches abcdef, but not def.

.: matches any character except the newline character.

{}: matches a specified number of occurrences. Ex: /de{3}f/ matches


deeef. /de{1,3}f/ matches def, deef, deeef.

c. Character-range escape sequencesf


Escape sequence

Description

Range

\d

Any digit

[0-9]

\D

Anything other than a digit

[^0-9]

\w

Any word character

[_0-9a-zA-Z]

\W

Anything not a word character

[^_0-9a-zA-Z]

\s

White space

[ \r\t\n\f]

\S

Anything other than white space [^ \r\t\n\f]


- Ex: instead of writing /[0-9]/, we can write /\d/
d. Pattern matching options

Duc Le

Option

Description

Match all possible patterns

Page 29

9/15/2008

Ignore case

Treat string as multiple lines

Only evaluate once

Treat string as single line

Ignore white space in pattern


- Ex:
@matches = "balata" =~ /.a/g;
assigns the following list to @matches:
("ba", "la", "ta")

e. The substitution operator


- Syntax:
s/pattern/replacement/
- Ex:
$string = "abc123def";
$string =~ s/123/456/;
So, $string is now: sbc456def
Options for substitution operator
Option Description
g

Change all occurrences of the pattern

Ignore case in pattern

Evaluate replacement string as expression

Treat string to be matched as multiple lines

Evaluate only once

Treat string to be matched as single line

Ignore white space in pattern


-

For example, to change all occurrences of abc to def, use the following:
s/abc/def/g

Duc Le

Page 30

9/15/2008

f. Translation operator
- Syntax:
tr/string1/string2/
- Ex:
$string = "abcdefghicba";
$string =~ tr/abc/def/;
So, $string is now: defdefghifed
Options for translation operator
Option

Description

Translate all characters not specified

Delete all specified characters

Replace multiple identical output characters with a single character


8. Subroutines
a. Subroutines
-

Like any good programming langauge Perl allows the user to define their
own functions, called subroutines. They may be placed anywhere in our
program but it's probably best to put them all at the beginning or all at
the end. A subroutine has the form:
sub mysubroutine
{
print "Somethings are here\n";
}
regardless of any parameters that we may want to pass to it.

To call a subroutine, we use & character in front of the name.

Ex: to call subroutine in above example, we use: &mysubroutine.

b. Parameters
-

Duc Le

When a subroutine is called, any parameters are passed as a list in the


special @_ list array variable.

Page 31

9/15/2008

Ex:
sub printargs
{
print @_\n;
}
&printargs(arg1, arg2);
Result in:
arg1 arg2

Just like any other list array the individual elements of @_ can be
accessed with the square bracket notation:

Ex:
sub printargs
{
print "$_[0]\n";
print "$_[1]\n";
print "$_[2]\n";
}
&printargs("arg1", arg2, "arg3");
Result in:
arg1
arg2
arg3

c. Returning values
-

Result of a subroutine is always the last thing evaluated. This subroutine


returns the maximum of two input parameters. An example of its use
follows.
sub maximum
{
if ($_[0] > $_[1])

Duc Le

Page 32

9/15/2008

{
$_[0];
}
else
{
$_[1];
}
}
$biggest = &maximum(37, 24);

# Now $biggest is 37

d. Local variable
- We can define local variables for using inside subroutines. These local
variables exist only while the subroutine is being executed. When a
subroutine finishes, its local variables are destroyed; if it is invoked
again, new copies of the local variables are defined.
- Ex:
sub printargs
{
local ($a, $b);
($a, $b) = ($_[0], $_[1]);
$c = $a + $b;
}
$sum = &printargs(1, 2);
print "$sum\n";
print "$a\n"; #Empty
print "$b\n"; #Emty
$a = 1;
$b = 2;
print "$a\n";
print "$b\n";
Duc Le

Page 33

9/15/2008

Result in:
3

1
2
9. Some functions
a. chop
-

Its function is to remove last character from a scalar value.

Syntax:
chop ($var)

Ex:
$input = <STDIN>;
print $input; #print which we input and newline character
chop ($input);
print $input; #print which we input
Result in:
%
Hello
Hello
Hello%

b. split
-

Its function is to split a character string into a list of elements.

Syntax:
list = split (pattern, value);

Ex:
Ex1:
$line = "This:is:a:string";
@list = split (/:/, $line);

Duc Le

Page 34

9/15/2008

print @list\n;
Result in:
This is a string
Ex2:
$line = "This:is:a:string";
@list = split (/:/, $line,3);
print @list\n;
Result in:
This is a:string
 In this example, after three elements have been created, no more new elements
are created.
c. sort
-

Its function is to sort a list in alphabetical order.

Syntax:
@sorted = sort (@list);

- Ex:
@list = ("h", "a", "z", "b");
print "@list\n";
@sorted = sort (@list);
print "@sorted\n";
Result in:
hazb
abhz
d. Reverse
-

Its function is to reverses the order of a list.

Syntax:
@reversed = reverse (@list);

Duc Le

Ex:
Page 35

9/15/2008

@reversed = reverse (@list);


print @reversed\n;
Result in:
bzah
IV. Reference
1. About UNIX and C-Shell, we can refer at:
http://192.168.100.222/web_books/unix_books/unix_book1/index.htm.
2. About Perl, we can refer more advanced at:
http://192.168.100.222/web_books/perl_books/teach_yourself_perl5_21_days/index
.htm and
http://192.168.100.222/web_books/perl_books/perl5_quick_reference/index.htm.

Duc Le

Page 36

9/15/2008

You might also like