Assignment clarifications How many errors to print? at most 1 per - - PowerPoint PPT Presentation

assignment clarifications
SMART_READER_LITE
LIVE PREVIEW

Assignment clarifications How many errors to print? at most 1 per - - PowerPoint PPT Presentation

Assignment clarifications How many errors to print? at most 1 per token. Interpretation of white space in { } treat as a valid extension, involving white space characters. Assignment FAQs have been updated. Shells and Shell


slide-1
SLIDE 1

Assignment clarifications

How many errors to print? – at most 1 per

token.

Interpretation of white space in { } – treat as

a valid extension, involving white space characters.

Assignment FAQs have been updated.

slide-2
SLIDE 2

Shells and Shell Programming

slide-3
SLIDE 3

Shells

A shell is a command line interpreter that is

the interface between the user and the OS.

A “program launcher” of sorts. The shell:

analyzes each command determines what actions are to be performed performs the actions

Example:

wc –l file1 > file2

slide-4
SLIDE 4

Which shell?

sh – Bourne shell

Most common, other shells are a superset Good for programming

csh or tcsh – default for command line on CDF

C-like syntax Best for interactive use. Not good for programming.

bash – default on Linux (Bourne again shell)

Based on sh, with some csh features.

korn – written by David Korn

Based on sh – Some claim best for programming. Commercial product.

slide-5
SLIDE 5

Shell Diagram

slide-6
SLIDE 6

Shell Startup

When a shell is invoked, it does the following:

  • 1. Read a special startup file (usually in home

directory)

  • 2. display prompt and wait for command
  • 3. Ctrl-D on its own line terminates shell,
  • therwise, goto step 2.
slide-7
SLIDE 7

Shell startup files

used to set shell options, set up environment

variables, alias

sh – executes .profile if it’s there. ksh – executes .profile if in interactive mode.

Executes $ENV (usually $HOME/.kshrc)

csh – executes .cshrc if it exists. If a login

shell, executes .login

bash – executes .bashrc, if a login shell,

executes .bash_profile instead

slide-8
SLIDE 8

Executables vs. Built-in Commands

Most commands you run are other compiled

programs.

Found in /bin Example: ls – shell locates ls binary in /bin

directory and launches it

Some are not compiled programs, but built

into the shell:

cd, echo

slide-9
SLIDE 9

Common shell facilities

Input-output redirection

prog < infile > outfile ls >& outfile # csh stdout and stderr ls > outfile 2>&1 # sh stdout and stderr

Pipelining commands

send the output from one command to the input of

the next. ls -l | wc ps –aux | grep reid | sort

slide-10
SLIDE 10

Job Control

A job is a program whose execution has been

initiated by the user.

At any moment, a job can be running or suspended. Foreground job:

a program which has control of the terminal

Background job:

runs concurrently with the parent shell and does not take

control of the keyboard.

Start a job in the background by appending & Commands: ^Z, jobs, fg, bg, kill

slide-11
SLIDE 11

File Name Expansion

ls *.c rm file[1-6].? cd ~/bin ls ~reid ls *.[^oa] - ^ in csh, ! in sh

* stands in for 0 or more characters ? stands in for exactly one character [1-6] stands in for one of 1, 2, 3, 4, 5, 6 [^oa] stands in for any char except o or a ~/ stands in for your home directory ~reid stands in for reid’s home directory

slide-12
SLIDE 12

Sequences

Enter series of simple commands or pipelines separated

by semicolons (;)

Commands will be executed in sequence Each process the shell executes has return value – shell

checks for it

conditional execution with &&,|| && executes next command if return value is 0 (success) || executes next command if return value is nonzero

(failure)

  • example: g++ myprog.cpp || echo compile failed
slide-13
SLIDE 13

Scripts

A bunch commands stored inside a text file Must add execute permission with chmod provides all the programming essentials: variables,

logic, control flow, loops

powerful way to automate tasks

First line of script should always be #! Pathname Pathname will be used to interpret script If #! Not there, sh (Bourne shell) is used

Should provide explicit return value by using exit

slide-14
SLIDE 14

Subshells

A copy of the current shell (child) Created when:

grouped commands with ; are executed. Parent

waits until child (subshell) finishes

Script is executed. Parent sleeps until script is

done

A background job is executed. Parent runs

concurrently with sub-shell

In 1st two cases, parent doesn’t wait if jobs

are in background

slide-15
SLIDE 15

Subshell Cont’d

Environment space copied from parent Local variables are clean:

slide-16
SLIDE 16

Shell Programming (Bourne shell)

file starts with #!/bin/sh

absolute path to the shell program not the same on every machine.

can also write programs interactively by

starting a new shell at the command line.

Tip: this is a good way to test your shell programs

slide-17
SLIDE 17

Example

In a file:

#! /bin/sh echo “Hello World!”

At the command line:

eddie% sh $ echo “Hello World!” Hello World! $ exit eddie% penguin% sh bash$ echo “Hello World!” Hello World! bash$ exit penguin%

slide-18
SLIDE 18

Commands

You can run any program in a shell by calling it as

you would on the command line.

When you run a program like grep or ls in a shell

program, a new process is created.

There are also some built-in commands where no

new process is created.

echo set read exit test shift wait

“man sh” to

see all builtins.

slide-19
SLIDE 19

Variables

  • Local shell variables vs. environment variables
  • Environment variables are copied to subshell, local shell variables

are not.

  • Use export to make local shell variables into environment variables:

sh-2.05a$ pet1=fuzzoo sh-2.05a$ pet2=moomoo sh-2.05a$ echo $pet1 $pet2 fuzzoo moomoo sh-2.05a$ export pet1 sh-2.05a$ sh sh-2.05a$ echo $pet1 $pet2 fuzzoo sh-2.05a$ exit sh-2.05a$ echo $pet1 $pet2 fuzzoo moomoo

slide-20
SLIDE 20

Predefined Environment Variables

$HOME – full path of your home directory $PATH – list of directories to search for files $MAIL – full path of mailbox $USER – your user name $SHELL – full path of your login shell

The initial values of the environment variables

are set by looking at the .profile file (Bourne shell) in your home directory.

slide-21
SLIDE 21

Other Built-in Variables

$$ – process id of the current shell $! – process id of last background command $0 – name of shell script $1...$9 – commandline arguments $* – list of all commandline args $? – return value of the previously executed

command

$# – number of commandline params.

slide-22
SLIDE 22

Variable Access

$name – replaced by value of name ${name} – replaced by value of name. Useful

if ${name} is followed by alphanumerical characters:

verb=play Doesn’t work: echo I like $verbing Works: echo I like ${verb}ing Output: I like playing

slide-23
SLIDE 23

Command line arguments

positional parameters: variables that are

assigned according to position in a string

Command line arguments are placed in

positional parameters:

#!/bin/sh echo arg1: $1 echo arg2: $2 echo name: $0 echo all: $* giant $ giant fee fie fo fum arg1: fee arg2: fie name: giant all: fee fie fo fum

slide-24
SLIDE 24

Another Example

sh-2.05a$ cat > shelldemo.sh #! /bin/sh echo $HOME echo $PATH echo commandline=$* echo 1st arg=$1 echo $? gcc hello.cpp echo $? gcc noexist.cpp echo $? sh-2.05a$ chmod ugo+x shelldemo.sh sh-2.05a$ shelldemo.sh arg1 arg2 arg3 /u/kenxu /u/kenxu/bin/Linux:/u/kenxu/bin:/local/bin/X11:/usr/X11R6/bin:/local/bin:/usr/ucb:/bin:/usr/bin:.:/u/kenxu commandline=arg1 arg2 arg3 1st arg=arg1 gcc: noexist.cpp: No such file or directory gcc: no input files 1

slide-25
SLIDE 25

Local Variables

local variables – spaces matter

name=value – assignment variables can have a single value or list of values.

Single value:

bindir=“/usr/bin”

List of values (separated by spaces):

searchdirs=“~/tests $HOME/test2 .”

slide-26
SLIDE 26

Example: ($ is the default sh prompt)

$ bindir=“/usr/bin” $ searchdirs=“~/tests $HOME/test2 .” $ echo $searchdirs ~/tests /u/reid/test2 . $ echo $bindir /usr/bin

slide-27
SLIDE 27

Quoting

Single and double quotes are

  • n the same key. Back quote

is often on the same key as ~.

Double quotes inhibit wildcard replacement

  • nly.

Single quotes inhibit wildcard replacement,

variable substitution and command substitution.

Back quotes cause command substitution. Practice and pay attention.

slide-28
SLIDE 28

Quoting example

$ echo Today is date Today is date $ echo Today is `date` Today is Thu Sep 19 12:28:55 EST 2002 $ echo ”Today is `date`” Today is Thu Sep 19 12:28:55 EST 2002 $ echo ’Today is `date`’ Today is `date`

” – double quotes ’ – single quote ` - back quote

slide-29
SLIDE 29

Another Quoting Example

What do the following statements produce if

the current directory contains the following non-executable files? a b c $ echo * $ echo ls * $ echo `ls *` $ echo ”ls *” $ echo ’ls *’ $ echo `*`

” – double quotes ’ – single quote ` - back quote

slide-30
SLIDE 30

More on Quoting

Command substitution causes another

process to be created.

Which is better? What is the difference?

src=`ls *.c`

  • r

src=*.c

slide-31
SLIDE 31

Here Documents

Easy way to provide input to commands

without using auxiliary files:

sh-2.05a$ cat << ENDOFTEXT > type some text and > have cat repleat > it! > ENDOFTEXT type some text and have cat repleat it! sh-2.05a$

slide-32
SLIDE 32

Arithmetic

Bourne Shell doesn’t support arithmetic natively. Use expr command (arithmetic & string)

  • sh-2.05a$ x=1
  • sh-2.05a$ echo $x
  • 1
  • sh-2.05a$ x=`expr $x + 2`
  • sh-2.05a$ echo $x
  • 3
  • sh-2.05a$ echo `expr \( 2 + 4 \) \* 5`
  • 30

sh-2.05a$ echo `expr length "cat"` 3 sh-2.05a$ echo `expr substr "donkey" 4 3` key sh-2.05a$ echo `expr index "donkey" "key"` 4 sh-2.05a$ echo `expr match "smalltalk" '.*lk'` 9 sh-2.05a$ echo `expr match "transputer" '.*lk'` sh-2.05a$ echo `expr \( 4 \> 5 \)` sh-2.05a$ echo `expr \( 4 \> 5 \) \| \( 6 \< 7 \)` 1

slide-33
SLIDE 33

Test

test is an utility that gives 0 exit status if boolean

condition is true and non-zero status otherwise

Some versions of Bourne shell has it built in syntax: test expression or [ expression ]

sh-2.05a$ if test 2 -eq 3 > then > echo equal > else > echo not equal > fi not equal sh-2.05a$ if [ 2 -eq 2 ]; then echo equal; else echo not equal; fi equal sh-2.05a$

slide-34
SLIDE 34

Test

Common

conditions that test supports:

And, or.

  • a, -o

≠ , > , < , ≤

  • ne, -gt, -lt, -le

True if int1 equals int2 int1 -eq int2 True if str1 not equal to str2 str1 != str2 True if str1 equals str2 str1 = str2 True if empty string

  • z string

Exists as an executable file.

  • x filename

Exists as a writable file.

  • w filename

Exists as a readable file

  • r filename

Exists as a regular file.

  • f filename

Exists as a directory

  • d filename

test arguments

slide-35
SLIDE 35

Control Statements

The general syntax for if is:

if command1 then command2 command3 ...etc elif command4 command5 ...etc else command6 fi

Looks at exit status to make decision

slide-36
SLIDE 36

The null command

Does nothing Consider an “unload” program:

ls –a | cpio –o > /dev/rmt0 if [ $? –eq 0 ] then rm * else echo problem occurred with cpio fi

How to convert this to a backup program?

slide-37
SLIDE 37

Case

Take a string and match it to a pattern:

sh-2.05a$ choice=2 sh-2.05a$ case $choice in > "1") > echo choice was 1 > ;; > "2"|"3") > echo choice was 2 or 3 > ;; > *) > echo unknown choice > ;; > esac choice was 2 or 3

slide-38
SLIDE 38

Loops

The for loop takes a list of arguments and executes

the loop one time for each word in the list

for color in red green blue pink do echo The sky is $color done

slide-39
SLIDE 39

While

The while loop tests on a boolean condition

sh-2.05a$ count=1 sh-2.05a$ while [ $count -lt 10 ] > do > echo $count > count=`expr $count + 1` > done 1 2 3 4 5 6 7 8 9 sh-2.05a$

slide-40
SLIDE 40

set and shift

set – assigns positional parameters to its

arguments.

$ set `date` $ echo “The date today is $2 $3, $6” The date today is Aug 27, 2001

shift – change the meaning of the positional

parameters

#!/bin/sh while test “$1” do echo $1 shift done giant2 $ giant2 fee fie fo fum fee fie fo fum

slide-41
SLIDE 41

read

read one line from standard input and

assigns successive words to the specified

  • variables. Leftover words are assigned to the

last variable.

#!/bin/sh echo “Enter your name:” read fName lName echo “First: $fName” echo “Last: $lName” name $ name Enter your name: Alexander Graham Bell First: Alexander Last: Graham Bell

slide-42
SLIDE 42

Debugging

set –vx (v: echo commands as they are read,

x: echo as commands as they are executed)

Set – to turn off tracing

slide-43
SLIDE 43

Example:

$ cat testscript2 #!/bin/sh set -vx a=`ls -l` b=5 ls -l | awk '{print $1;}' $ testscript2 a=`ls -l` ls -l ++ ls -l + a=total 1

  • rw-------

1 kenxu instrs 0 May 25 10:26 myfile1

  • rw-------

1 kenxu instrs 0 May 25 10:26 myfile2

  • rwx--x--x 1 kenxu instrs 58 May 25 10:19 testscript2

b=5 + b=5 …