Docstoc

linux06

Document Sample
linux06 Powered By Docstoc
					LINUX System : Lecture 6 Shell Programming

Extension of Functionality


UNIX is designed so that users can extend the functionality
  



To build new tools easily and efficiently To customize the shell and user interface. To string together a series of Unix commands to create new functionality. To create custom commands that do exactly what we want.

Shell


Command Interpreter that turns text that you type (at the command line) in to actions  User Interface: take the command from user


Shell Programming
  

We often want to do a number of commands together And bundle them up into one new command. Just like a batch file in MS-DOS

Shell 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.

Popular Shells



  

sh ksh bash csh,tcsh

Bourne Shell Korn Shell Bourne-Again Shell C Shell (for this course)

Shell scripts among those shells are slightly different

shell script


Creating a simple shell script


A shell script is a file that contains commands that the shell can execute.




Any commands you enter in response to a shell prompt.  A utility  A compiled program  Another shell script Control flow commands



Run a shell script
 

Enter the script filename on the command line The shell interprets and execute the commands one after another Simply and quickly initiate a complex series of tasks or a repetitive procedure.



Why shell script?


Shell script example
#!/bin/csh

echo “Current Time - `date`” echo I am `whoami`

C Shell

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 (permission).

C Shell

Shell Variables


Environment Variables


Used to provide information to programs



(Global) environment variable


New programs and shells inherit environment variables from their parent shell
Used only by that shell Not passed to other processes



(Local) shell variable
 

Environment Variables


“env” or “printenv” command

            

Display current environment variables
DISPLAY The graphical display to use, e.g. nyssa:0.0 EDITOR The path to your default editor, e.g. /usr/bin/vi GROUP Your login group, e.g. staff HOME Path to your home directory, e.g. /home/frank HOST The hostname of your system, e.g. nyssa IFS Internal field separators, usually any white space (defaults to tab, space and <newline>) LOGNAME The name you login with, e.g. frank PATH Paths to be searched for commands, e.g. /usr/bin:/usr/ucb:/usr/local/bin PS1 The primary prompt string, Bourne shell only (defaults to $) PS2 The secondary prompt string, Bourne shell only (defaults to >) SHELL The login shell you're using, e.g. /usr/bin/csh TERM Your terminal type, e.g. xterm USER Your username, e.g. frank

Set Shell Variables
 

Mostly set automatically when log in setenv


$ setenv NAME value

# in C Shell



set


$ set name = value # in C Shell

Variables
To set variables: set X [= value] # processed as a string

To unset variables : unset X
Variable contents are accessed using ‘$’: echo $PATH

C Shell

Array
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] To count the number of variable elements: echo $#Y set fname = prog1 rm ${fname}.c

C Shell

Built-in Variables
$user -- who am I? $path -- my execution path (list of directories to be searched for executables) $term -- what kind of terminal I am using $status -- a numeric variable, usually used to retun error codes $prompt -- what I am currently using for a prompt $shell -- which shell am I using (usu. either /bin/csh or /bin/sh)

% set Will display the variable lists.

Arithmetic (@) command


C shell provides arithmetic operaters  must be used with the arithmetic (@) command  Arithmetic command works only with integers.
set count = 5 @ count += 2 echo $count 90

Shell Arithmetic
 

expr op1 math-operator op2 Example

% expr 1 + 3 % expr 10 \* 3 % set A = `expr 3 + $B`

Command arguments
A shell script to swap files: #! /bin/csh –f set tmp = $argv[1] cp $argv[2] $argv[1] cp $tmp $argv[2] Arguments : $argv The number of arguments to a script: $#argv

-f option says we want fast startup (no read .cshrc) .
C Shell

if-then-else
if ( expr ) simple-command if ( expr ) then commandlist-1 [else commandlist-2] endif

C Shell

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

Loops
while ( expr ) commandlist end

foreach var ( worddlist ) commandlist end

C Shell

switch
switch ( str ) case string1: commandlist1 breaksw case string2: commandlist2 breaksw default commandlist endsw

C Shell

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

shift command


Moves the values in the parameters toward the beginning of the parameter list
#!/bin/csh –f

echo “There are” $#argv “parameters\n”
while ($#argv > 0) echo –n “$argv[1] “ shift end echo “\n” echo “There are now” $#argv “parameters” echo “end of script”

C Shell

Input


Reading Line by Line

% set x = $< This is a line. % echo $x This is a line.

File Operators
-e -r -l -w -x -o -f -d -s -z file file file file file file file file file file : : : : : : : : : : True True True True True True True True True True if if if if if if if if if if file exists file is readable file exists and is a symbolic link file exists and is writable file exists and is executable the user owns it the file exists and is a regular file the file exists and is a directory file exists and has a size greater than zero file length is zero (empty)

Logical operator


! : NEGATE  && : logical AND  || : logical OR


Ex)

if (! -e somefile) then # does not exist

Debugging
%csh –vx somescript args -v : vervose -x : echoes the commands after all substitutions are made -n : syntax check. No execution

example
#!/bin/csh if (-e $argv[1]) then echo $argv[1] exists else echo $argv[1] does not exist and cannot be opened endif # rest of script here

C Shell

example
#!/bin/csh

set sum = 0
echo –n “Enter a number: set num = $< ”

while ($num != “”) @ sum += $num echo –n “Enter the next number: ” set num = $< end echo “\nThe sum of the number is : $sum”

C Shell

Guidelines


Shell script is better than C program if the problem can be solved by using UNIX commands Why script?
 



Easier to create and modify Easy to debug



Good thing to do
   

Use redirection and pipe Do validity check (argument number , type) Check existence of files and directories Display error messages

example
#!/bin/csh

set j = (1 2 3 4 5) foreach i ($j) echo $i Hello end

C Shell

example
#!/bin/csh

set ary = `cat ary.dat`
echo echo echo echo “The “The “The “The whole array : $ary” number of elements : $#ary” first element: $ary[1]” last element: $ary[$#ary]”

C Shell

Numeric validation example
#!/bin/csh

echo $argv[2] > temp grep „^[0-9]*$‟ temp > /dev/null
if ($status != 0) then echo “Month argument is not numeric” exit 1 endif if ($argv[2] < 1 || $argv[2] > 12) then echo “Month argument must be <1…12>” exit 2 endif echo “Validation is OK. We continue.”

C Shell

example
#! /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 = $< # $< means “read a line” switch ($ans) case n: continue case q: exit case y: rm -rf $name continue endsw end:

C Shell

Exercise 1


Write a shell script that displays the number of files and directories in a given directory
format
% ./fd_count.csh directory_name



Exercise 2


Write a shell script that removes duplicate words from an input text file. Format




% remove_dup.csh in.txt out.txt

Four Two One One Four Two Two Three

Four Two One Three out.txt in.txt


				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:42
posted:8/2/2009
language:English
pages:36