|
|
1.1 root 1: .\" @(#)t1 6.1 (Berkeley) 5/22/86
2: .\"
3: .EH 'USD:3-%''An Introduction to the UNIX Shell'
4: .OH 'An Introduction to the UNIX Shell''USD:3-%'
5: .\".RP
6: .TL
7: An Introduction to the UNIX Shell
8: .AU
9: S. R. Bourne
10: .AI
11: .MH
12: .AU
13: (Updated for 4.3BSD by Mark Seiden)
14: .AB
15: .LP
16: The
17: .ul
18: shell\(dd
19: .FS
20: \(dd This paper describes sh(1). If it's the c shell (csh) you're interested in,
21: a good place to begin is William Joy's paper "An Introduction to the C shell" (USD:4).
22: .FE
23: is a command programming language that provides an interface
24: to the
25: .UX
26: operating system.
27: Its features include
28: control-flow primitives, parameter passing, variables and
29: string substitution.
30: Constructs such as
31: .ul
32: while, if then else, case
33: and
34: .ul
35: for
36: are available.
37: Two-way communication is possible between the
38: .ul
39: shell
40: and commands.
41: String-valued parameters, typically file names or flags, may be
42: passed to a command.
43: A return code is set by commands that may be used to determine control-flow,
44: and the standard output from a command may be used
45: as shell input.
46: .LP
47: The
48: .ul
49: shell
50: can modify the environment
51: in which commands run.
52: Input and output can be redirected
53: to files, and processes that communicate through `pipes'
54: can be invoked.
55: Commands are found by
56: searching directories
57: in the file system in a
58: sequence that can be defined by the user.
59: Commands can be read either from the terminal or from a file,
60: which allows command procedures to be
61: stored for later use.
62: .AE
63: .ds ST \v'.3m'\s+2*\s0\v'-.3m'
64: .SH
65: 1.0\ Introduction
66: .LP
67: The shell is both a command language
68: and a programming language
69: that provides an interface to the UNIX
70: operating system.
71: This memorandum describes, with
72: examples, the UNIX shell.
73: The first section covers most of the
74: everyday requirements
75: of terminal users.
76: Some familiarity with UNIX
77: is an advantage when reading this section;
78: see, for example,
79: "UNIX for beginners".
80: .[
81: unix beginn kernigh 1978
82: .]
83: Section 2 describes those features
84: of the shell primarily intended
85: for use within shell procedures.
86: These include the control-flow
87: primitives and string-valued variables
88: provided by the shell.
89: A knowledge of a programming language
90: would be a help when reading this section.
91: The last section describes the more
92: advanced features of the shell.
93: References of the form "see \fIpipe\fP (2)"
94: are to a section of the UNIX manual.
95: .[
96: seventh 1978 ritchie thompson
97: .]
98: .SH
99: 1.1\ Simple\ commands
100: .LP
101: Simple commands consist of one or more words
102: separated by blanks.
103: The first word is the name of the command
104: to be executed; any remaining words
105: are passed as arguments to the command.
106: For example,
107: .DS
108: who
109: .DE
110: is a command that prints the names
111: of users logged in.
112: The command
113: .DS
114: ls \(mil
115: .DE
116: prints a list of files in the current
117: directory.
118: The argument \fI\(mil\fP tells \fIls\fP
119: to print status information, size and
120: the creation date for each file.
121: .SH
122: 1.2\ Background\ commands
123: .LP
124: To execute a command the shell normally
125: creates a new \fIprocess\fP
126: and waits for it to finish.
127: A command may be run without waiting
128: for it to finish.
129: For example,
130: .DS
131: cc pgm.c &
132: .DE
133: calls the C compiler to compile
134: the file \fIpgm.c\|.\fP
135: The trailing \fB&\fP is an operator that instructs the shell
136: not to wait for the command to finish.
137: To help keep track of such a process
138: the shell reports its process
139: number following its creation.
140: A list of currently active processes may be obtained
141: using the \fIps\fP command.
142: .SH
143: 1.3\ Input\ output\ redirection
144: .LP
145: Most commands produce output on the standard output
146: that is initially connected to the terminal.
147: This output may be sent to a file
148: by writing, for example,
149: .DS
150: ls \(mil >file
151: .DE
152: The notation \fI>file\fP
153: is interpreted by the shell and is not passed
154: as an argument to \fIls.\fP
155: If \fIfile\fP does not exist then the
156: shell creates it;
157: otherwise the original contents of
158: \fIfile\fP are replaced with the output
159: from \fIls.\fP
160: Output may be appended to a file
161: using the notation
162: .DS
163: ls \(mil \*(APfile
164: .DE
165: In this case \fIfile\fP is also created if it does not already
166: exist.
167: .LP
168: The standard input of a command may be taken
169: from a file instead of the terminal by
170: writing, for example,
171: .DS
172: wc <file
173: .DE
174: The command \fIwc\fP reads its standard input
175: (in this case redirected from \fIfile\fP)
176: and prints the number of characters, words and
177: lines found.
178: If only the number of lines is required
179: then
180: .DS
181: wc \(mil <file
182: .DE
183: could be used.
184: .SH
185: 1.4\ Pipelines\ and\ filters
186: .LP
187: The standard output of one command may be
188: connected to the standard input of another
189: by writing
190: the `pipe' operator,
191: indicated by \*(VT,
192: as in,
193: .DS
194: ls \(mil \*(VT wc
195: .DE
196: Two commands connected in this way constitute
197: a \fIpipeline\fP and
198: the overall effect is the same as
199: .DS
200: ls \(mil >file; wc <file
201: .DE
202: except that no \fIfile\fP is used.
203: Instead the two processes are connected
204: by a pipe (see \fIpipe\fP (2)) and are
205: run in parallel.
206: Pipes are unidirectional and
207: synchronization is achieved by
208: halting \fIwc\fP when there is
209: nothing to read and halting \fIls\fP
210: when the pipe is full.
211: .LP
212: A \fIfilter\fP is a command
213: that reads its standard input,
214: transforms it in some way,
215: and prints the result as output.
216: One such filter, \fIgrep,\fP
217: selects from its input those lines
218: that contain some specified string.
219: For example,
220: .DS
221: ls \*(VT grep old
222: .DE
223: prints those lines, if any, of the output
224: from \fIls\fP that contain
225: the string \fIold.\fP
226: Another useful filter is \fIsort\fP.
227: For example,
228: .DS
229: who \*(VT sort
230: .DE
231: will print an alphabetically sorted list
232: of logged in users.
233: .LP
234: A pipeline may consist of more than two commands,
235: for example,
236: .DS
237: ls \*(VT grep old \*(VT wc \(mil
238: .DE
239: prints the number of file names
240: in the current directory containing
241: the string \fIold.\fP
242: .SH
243: 1.5\ File\ name\ generation
244: .LP
245: Many commands accept arguments
246: which are file names.
247: For example,
248: .DS
249: ls \(mil main.c
250: .DE
251: prints information relating to the file \fImain.c\fP\|.
252: .LP
253: The shell provides a mechanism
254: for generating a list of file names
255: that match a pattern.
256: For example,
257: .DS
258: ls \(mil \*(ST.c
259: .DE
260: generates, as arguments to \fIls,\fP
261: all file names in the current directory that end in \fI.c\|.\fP
262: The character \*(ST is a pattern that will match any string
263: including the null string.
264: In general \fIpatterns\fP are specified
265: as follows.
266: .RS
267: .IP \fB\*(ST\fR 8
268: Matches any string of characters
269: including the null string.
270: .IP \fB?\fR 8
271: Matches any single character.
272: .IP \fB[\*(ZZ]\fR 8
273: Matches any one of the characters
274: enclosed.
275: A pair of characters separated by a minus will
276: match any character lexically between
277: the pair.
278: .RE
279: .LP
280: For example,
281: .DS
282: [a\(miz]\*(ST
283: .DE
284: matches all names in the current directory
285: beginning with
286: one of the letters \fIa\fP through \fIz.\fP
287: .DS
288: /usr/fred/test/?
289: .DE
290: matches all names in the directory
291: \fB/usr/fred/test\fP that consist of a single character.
292: If no file name is found that matches
293: the pattern then the pattern is passed,
294: unchanged, as an argument.
295: .LP
296: This mechanism is useful both to save typing
297: and to select names according to some pattern.
298: It may also be used to find files.
299: For example,
300: .DS
301: echo /usr/fred/\*(ST/core
302: .DE
303: finds and prints the names of all \fIcore\fP files in sub-directories
304: of \fB/usr/fred\|.\fP
305: (\fIecho\fP is a standard UNIX command that prints
306: its arguments, separated by blanks.)
307: This last feature can be expensive,
308: requiring a scan of all
309: sub-directories of \fB/usr/fred\|.\fP
310: .LP
311: There is one exception to the general
312: rules given for patterns.
313: The character `\fB.\fP'
314: at the start of a file name must be explicitly
315: matched.
316: .DS
317: echo \*(ST
318: .DE
319: will therefore echo all file names in the current
320: directory not beginning
321: with `\fB.\fP'\|.
322: .DS
323: echo \fB.\fP\*(ST
324: .DE
325: will echo all those file names that begin with `\fB.\fP'\|.
326: This avoids inadvertent matching
327: of the names `\fB.\fP' and `\fB..\fP'
328: which mean `the current directory'
329: and `the parent directory'
330: respectively.
331: (Notice that \fIls\fP suppresses
332: information for the files `\fB.\fP' and `\fB..\fP'\|.)
333: .SH
334: 1.6\ Quoting
335: .LP
336: Characters that have a special meaning
337: to the shell, such as \fB< > \*(ST ? \*(VT &\|,\fR
338: are called metacharacters.
339: A complete list of metacharacters is given
340: in appendix B.
341: Any character preceded by a \fB\\\fR is \fIquoted\fP
342: and loses its special meaning, if any.
343: The \fB\\\fP is elided so that
344: .DS
345: echo \\\\?
346: .DE
347: will echo a single \fB?\|,\fP
348: and
349: .DS
350: echo \\\\\\\\
351: .DE
352: will echo a single \fB\\\|.\fR
353: To allow long strings to be continued over
354: more than one line
355: the sequence \fB\\newline\fP
356: is ignored.
357: .LP
358: \fB\\\fP is convenient for quoting
359: single characters.
360: When more than one character needs
361: quoting the above mechanism is clumsy and
362: error prone.
363: A string of characters may be quoted
364: by enclosing the string between single quotes.
365: For example,
366: .DS
367: echo xx\'\*(ST\*(ST\*(ST\*(ST\'xx
368: .DE
369: will echo
370: .DS
371: xx\*(ST\*(ST\*(ST\*(STxx
372: .DE
373: The quoted string may not contain
374: a single quote
375: but may contain newlines, which are preserved.
376: This quoting mechanism is the most
377: simple and is recommended
378: for casual use.
379: .LP
380: A third quoting mechanism using double quotes
381: is also available
382: that prevents interpretation of some but not all
383: metacharacters.
384: Discussion of the
385: details is deferred
386: to section 3.4\|.
387: .SH
388: 1.7\ Prompting
389: .LP
390: When the shell is used from a terminal it will
391: issue a prompt before reading a command.
392: By default this prompt is `\fB$\ \fR'\|.
393: It may be changed by saying,
394: for example,
395: .DS
396: \s-1PS1\s0=yesdear
397: .DE
398: that sets the prompt to be the string \fIyesdear\|.\fP
399: If a newline is typed and further input is needed
400: then the shell will issue the prompt `\fB>\ \fR'\|.
401: Sometimes this can be caused by mistyping
402: a quote mark.
403: If it is unexpected then an interrupt (\s-1DEL\s0)
404: will return the shell to read another command.
405: This prompt may be changed by saying, for example,
406: .DS
407: \s-1PS2\s0=more
408: .DE
409: .SH
410: 1.8\ The\ shell\ and\ login
411: .LP
412: Following \fIlogin\fP (1)
413: the shell is called to read and execute
414: commands typed at the terminal.
415: If the user's login directory
416: contains the file \fB.profile\fP
417: then it is assumed to contain commands
418: and is read by the shell before reading
419: any commands from the terminal.
420: .SH
421: 1.9\ Summary
422: .sp
423: .RS
424: .IP \(bu
425: \fBls\fP
426: .br
427: Print the names of files in the current directory.
428: .IP \(bu
429: \fBls >file\fP
430: .br
431: Put the output from \fIls\fP into \fIfile.\fP
432: .IP \(bu
433: \fBls \*(VT wc \(mil\fR
434: .br
435: Print the number of files in the current directory.
436: .IP \(bu
437: \fBls \*(VT grep old\fR
438: .br
439: Print those file names containing the string \fIold.\fP
440: .IP \(bu
441: \fBls \*(VT grep old \*(VT wc \(mil\fR
442: .br
443: Print the number of files whose name contains the string \fIold.\fP
444: .IP \(bu
445: \fBcc pgm.c &\fR
446: .br
447: Run \fIcc\fP in the background.
448: .RE
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.