Shell

advertisement
Software Tools
The UNIX
Shell
Slide 2
Basic Shell Syntax
command [-[options]] [arg] [arg] …


The name of the command is first
Options are normally single letters that turn an
option on or off. They can be combined or given
separately.
$ ls -dil
$ ls -l -d -i

Options sometimes also take a value. The value
can usually be either given right after the option or
separately:
$ ypcat -d ug.cs.ust.hk passwd
Slide 3
Command Options

Most commands require you to give all options before filename arguments.
The following command works in Linux, but not SunOS:
$ cat names -n
George W. Bush
Bill Gates
Bill Gates
Bill Clinton
George W. Bush
cat: cannot open –n

Spaces separate options. To turn something with spaces into a single
argument, use quotes:
$ grep vote thing letter1
grep: can’t open thing
letter1:You have the Florida vote thing
$ grep ”vote thing” letter1
You have the Florida vote thing
Slide 4
Command Options

Double quotes and single quotes are a bit different.
For now, you can use them interchangeably.
$ grep ‘vote thing’ letter1
You have the Florida vote thing

To escape a single character (prevent it from being
treated specially) proceed it with a backslash:
$ grep ”We\’ll” letter2
by my office. We'll tidy up a few more things before
$ echo ”*”
*
$ echo ‘*’
*
$ echo \*
*
$ echo *
letter1
letter2
names
secret/
Slide 5
How Does the Shell Find a Command?


The shell searches a list of directories for an
executable file with the same name.
The list of directories is stored in the PATH variable for
Bourne shells and in the path array for csh/tcsh
$ PATH=/usr/local/bin:$PATH
% set path=(/usr/local/bin $path)


sh
csh, tcsh
If there is a match in more than one directory, the shell
uses the first one it finds.
If you want to run a command that is not in one of
these directories, you can give a pathname (relative or
absolute) instead.
~horner/bin/csound
Slide 6
How Does the Shell Find a Command?


A few commands are built into the shell. This varies
from shell to shell. The echo command, for example,
is often builtin, for efficiency.
You can find out where the shell is getting a particular
command using the “which” command in any shell:
$ which echo
echo: shell built-in command.
$ which cat
Makes directories blue,
/bin/cat
executables green,
$ which grep
and soft links aqua
/bin/grep
$ which ls
ls:
aliased to ls --color=tty
Slide 7
Alias

The C Shell has the alias command, which allows you to
create command shortcuts.
$ alias ls "ls -F"
$ alias rm "rm -i"
$ alias + "chmod u+x *"
$ alias - "chmod u-x *"
$ alias 111 "cd ~horner/111"
$ pwd
/bin
$ 111
$ pwd
/homes/horner/111

On most Unix machines (except Mandriva/Mandrake in CSLab2), if you put
the alias commands in your .cshrc file, you can use them every time you
login.
Slide 8
Standard Input

Every time you login, or run a shell, you are
“connected” to the computer on a particular terminal.
$ who
horner
horner

pts/3
pts/0
Feb 14 10:23
Feb 14 11:57
(csnt1.cs.ust.hk)
(csz096.cs.ust.hk)
These devices (pts/0) are actually files in the
directory /dev. So, if you are logged in on pts/0, this
works just fine:
$ date > /dev/pts/0
Mon Feb 14 17:08:21 HKT 2005
Slide 9
Standard Input

In fact, you can redirect stdout to a different device
(e.g., pts/3), if you have permission. (The write
command works this way.)

You can find out which terminal a particular shell is
connected to using the tty command:
$ tty
/dev/pts/0
$ echo
$
"Hi
Andrew!" > /dev/pts/3
Slide 10
Tee

A special command called tee acts like a T-joint in
plumbing:
$ who
horner pts/3
Feb 14 10:23 (csnt1.cs.ust.hk)
horner pts/0
Feb 14 11:57 (csz096.cs.ust.hk)
$ who | sort | tee sortedwho | wc -l
2
$ cat sortedwho
horner pts/0
Feb 14 11:57
horner pts/3
Feb 14 10:23
(csz096.cs.ust.hk)
(csnt1.cs.ust.hk)
$
In this example, the output of sort is placed in a file
“sortedwho“ and piped to wc -l, which counts the
number of lines.
Slide 11
Background Jobs

A simple command or pipeline can be put into the
background by following it with the “&” character:
$ sort names > names.sort &
[1] 3236
$


The shell will print the process ID (PID), and a job
number (1, in this case).
In some shells, you will be notified when the job is
done (you may have to hit return again):
$ sort names > names.sort &
[1] 3236
$
[1]
Done
sort names > names.sort
$
Slide 12
Background Jobs

Put a job in the background by typing “CTRL-Z”
$ ypcat passwd | sort >passwd.sort
^Z
Suspended
$

The job is suspended - not running - until you either
place it in the background using bg:
$ bg
[1]
$
ypcat passwd | sort > passwd.sort &
or back to the foreground using fg:
$ fg
ypcat passwd | sort >passwd.sort
$
Slide 13
Jobs

The jobs command tells you what jobs are running:
$ ypcat passwd | sort > passwd.sort
^Z
Suspended
$ jobs
[1] + Suspended
ypcat passwd | sort > passwd.sort
$

You can stop a job with the kill command:
$ ypcat passwd | sort > passwd.sort &
[1] 3414 3415
$ kill %1
$
[1]
Terminated
ypcat passwd |
Exit 2
sort > passwd.sort
$
The “%1” means “job #1”. You can also use the PID.
Slide 14
Jobs

The ps command is the main way to find out about
jobs:
$ ps
PID TTY
TIME CMD
1401 pts/0
0:01 csh
$
$ ypcat passwd | sort > passwd.sort &
[1] 3476 3477
$ ps
PID TTY
TIME CMD
3477 pts/0
0:00 sort
1401 pts/0
0:01 csh
3476 pts/0
0:01 ypcat
$
Slide 15
Jobs

Note that if you put something into the background,
you better redirect stdout, or the output will appear on
your screen anyway!
$ ypcat passwd &
ma_wmkaa:uq2jXK0sFQ8Jg:36747:5000:Woo Man Kei,,=EXP.2001.05.30=nc99S:/homes/ma_h
ma_chyaa:CS9wq.1zOxnhI:35435:5000:Chu How Yin Agnes,,=EXP.2001.05.30=nc98F:/homs
ee_tkcaa:9LtI7Tipk2Ca6:35651:5000:Tsang Kong Chau,,=EXP.2001.05.30=nc99S:/homesh
eg_cck:yi7XtKxxP5KaQ:43555:10010:Cheung Chi Keung,,ce98_yr1:/homes/eg_cck:/bin/h
cs_wks:dtjvwifI2G7v2:24514:10001:Wong Kin Shing,,cs98_yr1:/homes/cs_wks:/bin/tch
cs_lwk:OWiGoJRXSjn.s:24032:10001:Leung Wai Kei Ricky,,cs98_yr2:/homes/cs_lwk:/bh
ph_chyac:CSJUo9e2KGqKg:35955:5000:Chan Hoi Yan,,=EXP.2001.05.30=nc98F:/homes/phs
ee_wkkab:dfbi3GqWjvf5U:35644:5000:Wong Ka Keung,,=EXP.2001.05.30=nc99S:/homes/eh
ph_lcy:CSwGgr5IeIvqc:36689:5000:Lam Chi Yin,,=EXP.2001.05.30=nc99S:/homes/ph_lcx
^C
$ ypcat passwd >file &
$
Slide 16
More Pattern Matching

The notation “[abcd]” matches any single one of the
enclosed characters.
$ ls [il]*
it
it1
$



ith
its@
letter1
letter4
The notation “[a-z]” matches any lowercase letter.
The notation “[0-9]” matches any digit character.
The notation “[0-59]” matches any the digit characters
0, 1, 2, 3, 4, 5, and 9.
$ ls letter*
letter1
letter4
$ ls letter[0-35]
letter1
$ ls letter[0-24]
letter1
letter4
Slide 17
More Pattern Matching

Most shells allow you to give a list of strings in curly
brackets, comma separated:
$ ls *{1,.sort}
NAMES1
it1
f1
letter1
secret1:
secret1: Permission denied
$
names.sort
passwd.sort
s1@
Slide 18
Switching Shells

You can switch shells by just typing its name:
csl2wk01.cs.ust.hk> ps
PID TTY
TIME CMD
3496 pts/0
0:01 csh
csl2wk01.cs.ust.hk> tcsh
csl2wk01.cs.ust.hk> ps
PID TTY
TIME CMD
3650 pts/0
0:00 tcsh
3496 pts/0
0:01 csh
csl2wk01.cs.ust.hk> sh
$ ps
PID TTY
TIME CMD
3650 pts/0
0:00 tcsh
3496 pts/0
0:01 csh
3659 pts/0
0:00 sh
$ ^D
csl2wk01.cs.ust.hk> ps
PID TTY
TIME CMD
3650 pts/0
0:00 tcsh
3496 pts/0
0:01 csh
Slide 19
Combining Commands


Multiple pipelines can be input on one command line
by separating them with semicolons.
When entering a long command, use a backslash (\)
to continue the command on the next line.
$ date; sort names; \
who
Mon Feb 14 19:40:28 HKT 2005
Bill Clinton
Bill Gates
Bill Gates
George W. Bush
George W. Bush
horner
horner
pts/3
pts/0
Feb 14 10:23
Feb 14 19:11
(csnt1.cs.ust.hk)
(csz096.cs.ust.hk)
Slide 20
Combining Commands


Commands can be grouped together using
parentheses
There are two main reasons to group commands:

To create a “single command” out of a group of commands
(especially useful before a pipe):
$ (cat letter1; head -2 names) | sort >list

To run a set of commands in their own subshell (especially
when trying to limit the effect of a cd command):
$ (cd secret; ls | wc -l); ls | wc -l
3
25
This line has the effect of counting the files
in secret, and then counting the files in the
current directory.
Download