Upload
verity-higgins
View
218
Download
1
Embed Size (px)
Citation preview
2
Brief review of unix1.txt
Glob Construct (metacharacters) and other special characters ?, *, [] Ex. ls prog?.c ls p*.c ls ???.* ls prog[123].c ls [m-s]* ls [1-5A-Z] ls [!ABC] [!a-z0-47] Other characters: ~; ~user; ~-; ~+
3
More unix commands
grep (egrep) find head tail cut paste sed tr Tee Jobs fg %1 !! !-n !cmd ^str1^str2^
4
Shell scripts
Typing on command line One time task
Shell scripts Executable ASCII file containing shell command Can run like a program Deal with complex task Repeat it later
5
Shell script cont’d
A shell script, in its most basic form, is simply a collection of operating system commands put into a text file in the order they are needed for execution. #!/bin/bash rm -f /tmp/listing.tmp > /dev/null 2>&1
touch /tmp/listing.tmp ls -l [a-z]*.doc | sort > /tmp/listing.tmp
lpr -Ppostscript_1 /tmp/listing.tmp rm -f /tmp/listing.tmp
6
Shell Programming
1. Shell scripts must be marked as executable:chmod a+x myScript
2. Use # to start a comment. Comments run from # to the end of the line.
3. All shell scripts begin with the interpreter you want to use:#!/bin/bash
Example:#!/bin/bashwho | grep ycjiangexit 0
7
Running a shell script
To run a UNIX script:
1) Type the script into a file.
2) Change the file permission to executable.
3) Execute it (by typing the filename at the prompt).
8
Shell Variables
Shell variables are stored as strings:
Example:
#!/bin/bashx=1 # Note: No spaces in assignment.
# If space after x, thinks x is a commandecho The value of x is $x # $x prints the value of variable xecho The home directory is $HOMEecho The current shell is $SHELL
(Note: to debug, use -x: sh -x scriptFileNameThis will list the commands as they are executed.)
9
Using Quotes
Single quote: Groups together characters until end quote.$ is not processed.Example: #!/bin/sh grep Constance John /etc/passwd
#Tries to open John as a file grep 'Constance John' /etc/passwd
#Searches for Constance John #in passwd file
x=1 echo $x #echos 1 echo '$x' #echos $x
exit 0
10
Double Quotes
Double quotes act like single quotes, except the $ is processed:
#!/bin/bashx=1echo $x #echos the value of xecho "$x" #echos the value of x
address="College of the Engineering and Science"echo $address #echos College of the Engineering and Scienceecho "$address" #dittoexit 0
11
More Quotes
Backslash (\): Places a single quote around a character:\> is the same as '>'
Back quote (`): Tells shell to execute the enclosed command and insert the output here:
#!/bin/bashecho There are `who | wc -l` users logged onexit 0
Try these examples out for yourself!
12
Evaluating Expressions
Use expr to evaluate arithmetic expressions:
Example:
#!/bin/bashi=1i=`expr $i + 1` #use back quoteecho $i #prints out 2exit 0
13
Common Mistakes
Mistake 1: Leaving out expr:#!/bin/bashi=1i=$i+1echo $i #prints 1+1exit 0
Mistake 2: Leaving out spaces around +#!/bin/bashi=1i=`expr $i+1`echo $i #prints out 1+1exit 0
14
Using Arguments with a Shell script
Example command:>myShell arg1 arg2 arg3
arg1 is accessed by $1, arg2 is accessed by $2, etc.
Question: What is accessed by $0?
The number of arguments (not including the command) is given by $#
$# for the above command line is 3.
15
example
#!/bin/bash #source: prnargs #shell pgm to print out its first 2 args echo The first argument is: $1 echo The second argument is: $2 exit 0
16
To run:
First, make sure it is executable (has execute permissions for user), /home/ycjiang> prnargs "Hello there" world
The first argument is: Hello there The second argument is: world
Note: spacing is correct, it ignores fact that I lined up the 2 args in the echo
--could have used quotes in echo, echo "The first argument is: " $1 echo "The second argument is:" $2 --or could have used echo backslash
-escape TAB char, \t (see man echo) echo -e "The first argument is:\t" $1 echo -e "The second argument is:\t" $2
17
The shift command
The shift command shifts each variable down 1.$2 becomes $1, etc.$0 is not shifted. It always refers to the command name.
Example command line:>cmd x y z
Example script:#!/bin/shecho $# $0 $1 $2 #prints 3 cmd x yshiftecho $# $0 $1 $2 #prints 2 cmd y zshift
echo $# $0 $1 $2 #prints 1 cmd zexit 0
18
The read command
Use the read command to read in from the keyboard:Example:
!/bin/bashread x y zecho "x = " $xecho "y = " $yecho "z = " $zread textecho "text = " $textexit 0
If type "I love shell programming!" at first read:$x is "I", $y is "love" and $z is "shell programming!"
If type "I love shell programming!" at second read:$text is "I love shell programming"
Use < to read in from a file:read x y z < myFile
19
Conditionals
Example of a conditional statement:
#!/bin/bashread nameif [ "$name" = Joe ]then
echo It is Joeelse
echo It is "$name", not Joefi #fi marks the end of the statementexit 0
20
Integer comparisons
-eq (or =)is equal to-ge greater than or equal to-gt greater than-le less than or equal to-lt less than-ne not equal to
Example:if [ num1 -lt num2 ]then
...fi
21
for loops
Example:#!/bin/bashfor i in 1 2 3 4 5do
for j in .1 .2 .3 .4 .5do
echo $i$jdone
doneexit 0
Note: break command exits loopcontinue loops back to top, skipping the rest of the
current iteration.
22
while loops
Example:#!/bin/bashi=1num=5while [ $i -le $num ]do
echo $i >> file_testi=`expr $i + 1`
doneexit 0
What does this do?Note: while read x
loops until zero exit status not returned from read.
23
Defining Functions
Example:#!/bin/bashnu(){
who | wc -l}echo Number of users is `nu`echo Number of users is now `nu`exit 0
24
Writing Good Shell Scripts
1. Verify that the correct number of arguments is used:#!/bin/bashif [$# -ne 3 ]then
echo "only $# parameters entered."echo "Usage: $0 arg1 arg2 arg3"exit 127
fiexit 0
2. Use good design and style (e.g. use functions and comments.
3. Return an exit status:exit 0 #things worked OKexit 127 #non-zero: error occurred.
See /usr/include/sysexits.h for sample exit codes.