Remove building with NOCRYPTO option
[minix.git] / bin / sh / USD.doc / t1
blob075511fe8cb2224bf6cf61ecba380a83e2ce9b6f
1 .\"     $NetBSD: t1,v 1.3 2010/08/22 02:19:07 perry Exp $
2 .\"
3 .\" Copyright (C) Caldera International Inc. 2001-2002.  All rights reserved.
4 .\"
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions are
7 .\" met:
8 .\"
9 .\" Redistributions of source code and documentation must retain the above
10 .\" copyright notice, this list of conditions and the following
11 .\" disclaimer.
12 .\"
13 .\" Redistributions in binary form must reproduce the above copyright
14 .\" notice, this list of conditions and the following disclaimer in the
15 .\" documentation and/or other materials provided with the distribution.
16 .\"
17 .\" All advertising materials mentioning features or use of this software
18 .\" must display the following acknowledgment:
19 .\"
20 .\" This product includes software developed or owned by Caldera
21 .\" International, Inc.  Neither the name of Caldera International, Inc.
22 .\" nor the names of other contributors may be used to endorse or promote
23 .\" products derived from this software without specific prior written
24 .\" permission.
25 .\"
26 .\" USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
27 .\" INTERNATIONAL, INC.  AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
28 .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
29 .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
30 .\" DISCLAIMED.  IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE
31 .\" FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR
32 .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33 .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
34 .\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
35 .\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
36 .\" OR OTHERWISE) RISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
37 .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 .\"
39 .\"     @(#)t1  8.1 (Berkeley) 8/14/93
40 .\"
41 .EH 'USD:3-%''An Introduction to the UNIX Shell'
42 .OH 'An Introduction to the UNIX Shell''USD:3-%'
43 .\".RP
44 .TL
45 An Introduction to the UNIX Shell
46 .AU
47 S. R. Bourne
48 .AI
49 Murray Hill, NJ
50 .AU
51 (Updated for 4.3BSD by Mark Seiden)
52 .AU
53 (Further updated by Perry E. Metzger)\(dg
54 .AB
55 .FS
56 \(dg This paper was updated in 2010 to reflect most features of modern
57 POSIX shells, which all follow the design of S.R. Bourne's original v7
58 Unix shell.
59 Among these are ash, bash, ksh and others.
60 Typically one of these will be installed as /bin/sh on a modern system.
61 It does not describe the behavior of the c shell (csh).
62 If it's the c shell (csh) you're interested in, a good place to
63 begin is William Joy's paper "An Introduction to the C shell" (USD:4).
64 .FE
65 .LP
66 The
67 .ul
68 shell
69 is a command programming language that provides an interface
70 to the
71 .UX
72 operating system.
73 Its features include
74 control-flow primitives, parameter passing, variables and
75 string substitution.
76 Constructs such as
77 .ul
78 while, if then else, case
79 and
80 .ul
81 for
82 are available.
83 Two-way communication is possible between the
84 .ul
85 shell
86 and commands.
87 String-valued parameters, typically file names or flags, may be
88 passed to a command.
89 A return code is set by commands that may be used to determine control-flow,
90 and the standard output from a command may be used
91 as shell input.
92 .LP
93 The
94 .ul
95 shell
96 can modify the environment
97 in which commands run.
98 Input and output can be redirected
99 to files, and processes that communicate through `pipes'
100 can be invoked.
101 Commands are found by
102 searching directories
103 in the file system in a
104 sequence that can be defined by the user.
105 Commands can be read either from the terminal or from a file,
106 which allows command procedures to be
107 stored for later use.
109 .ds ST \v'.3m'\s+2*\s0\v'-.3m'
111 1.0\ Introduction
113 The shell is both a command language
114 and a programming language
115 that provides an interface to the UNIX
116 operating system.
117 This memorandum describes, with
118 examples, the UNIX shell.
119 The first section covers most of the
120 everyday requirements
121 of terminal users.
122 Some familiarity with UNIX
123 is an advantage when reading this section;
124 see, for example,
125 "UNIX for beginners".
127 unix beginn kernigh 1978
129 Section 2 describes those features
130 of the shell primarily intended
131 for use within shell procedures.
132 These include the control-flow
133 primitives and string-valued variables
134 provided by the shell.
135 A knowledge of a programming language
136 would be a help when reading this section.
137 The last section describes the more
138 advanced features of the shell.
139 References of the form "see \fIpipe\fP (2)"
140 are to a section of the UNIX manual.
142 seventh 1978 ritchie thompson
145 1.1\ Simple\ commands
147 Simple commands consist of one or more words
148 separated by blanks.
149 The first word is the name of the command
150 to be executed; any remaining words
151 are passed as arguments to the command.
152 For example,
154         who
156 is a command that prints the names
157 of users logged in.
158 The command
160         ls \(mil
162 prints a list of files in the current
163 directory.
164 The argument \fI\(mil\fP tells \fIls\fP
165 to print status information, size and
166 the creation date for each file.
168 1.2\ Input\ output\ redirection
170 Most commands produce output on the standard output
171 that is initially connected to the terminal.
172 This output may be sent to a file
173 by writing, for example,
175         ls \(mil >file
177 The notation \fI>file\fP
178 is interpreted by the shell and is not passed
179 as an argument to \fIls.\fP
180 If \fIfile\fP does not exist then the
181 shell creates it;
182 otherwise the original contents of
183 \fIfile\fP are replaced with the output
184 from \fIls.\fP
185 Output may be appended to a file
186 using the notation
188         ls \(mil \*(APfile
190 In this case \fIfile\fP is also created if it does not already
191 exist.
193 The standard input of a command may be taken
194 from a file instead of the terminal by
195 writing, for example,
197         wc <file
199 The command \fIwc\fP reads its standard input
200 (in this case redirected from \fIfile\fP)
201 and prints the number of characters, words and
202 lines found.
203 If only the number of lines is required
204 then
206         wc \(mil <file
208 could be used.
209 .\" I considered adding the following, but have thought better of it
210 .\" for now.
211 .\" -- Perry Metzger
213 .\" .LP
214 .\" Error messages are typically printed by commands on a different
215 .\" channel, called standard error, which may also be redirected using the
216 .\" notation 2>\|.
217 .\" For example
218 .\" .DS
219 .\" command some args >out 2>errors
220 .\" .DE
221 .\" will redirect standard output to the file `out' but standard error
222 .\" (and thus all error messages) to `errors'.
223 .\" The notation 2>&1 sets standard error pointing to the same
224 .\" place as standard out.
225 .\" Thus:
226 .\" .DS
227 .\" command some args 2>&1 >everything
228 .\" .DE
229 .\" will put both standard out and standard error into the file `everything'.
230 .\" See section 3.7 below for more details.
232 1.3\ Pipelines\ and\ filters
234 The standard output of one command may be
235 connected to the standard input of another
236 by writing
237 the `pipe' operator,
238 indicated by \*(VT,
239 as in,
241         ls \(mil \*(VT wc
243 Two commands connected in this way constitute
244 a \fIpipeline\fP and
245 the overall effect is the same as
247         ls \(mil >file; wc <file
249 except that no \fIfile\fP is used.
250 Instead the two \fIprocesses\fP are connected
251 by a pipe (see \fIpipe\fP(2)) and are
252 run in parallel.
253 Pipes are unidirectional and
254 synchronization is achieved by
255 halting \fIwc\fP when there is
256 nothing to read and halting \fIls\fP
257 when the pipe is full.
259 A \fIfilter\fP is a command
260 that reads its standard input,
261 transforms it in some way,
262 and prints the result as output.
263 One such filter, \fIgrep,\fP
264 selects from its input those lines
265 that contain some specified string.
266 For example,
268         ls \*(VT grep old
270 prints those lines, if any, of the output
271 from \fIls\fP that contain
272 the string \fIold.\fP
273 Another useful filter is \fIsort\fP.
274 For example,
276         who \*(VT sort
278 will print an alphabetically sorted list
279 of logged in users.
281 A pipeline may consist of more than two commands,
282 for example,
284         ls \*(VT grep old \*(VT wc \(mil
286 prints the number of file names
287 in the current directory containing
288 the string \fIold.\fP
290 1.4\ Background\ commands
292 To execute a command (or pipeline) the shell normally
293 creates the new \fIprocesses\fP
294 and waits for them to finish.
295 A command may be run without waiting
296 for it to finish.
297 For example,
299         cc pgm.c &
301 calls the C compiler to compile
302 the file \fIpgm.c\|.\fP
303 The trailing \fB&\fP is an operator that instructs the shell
304 not to wait for the command to finish.
305 To help keep track of such a process
306 the shell reports its job number (see below) and process
307 id following its creation.
308 Such a command is said to be running in the \fIbackground\fP.
309 By contrast, a command executed without the \fB&\fP is said to be
310 running in the \fIforeground\fP.\(dg
312 \(dg Even after execution, one may move commands from the foreground
313 to the background, or temporarily suspend their execution (which is
314 known as \fIstopping\fP a command.
315 This is described in detail in section 3.10 on \fIJob Control\fB.
318 A list of currently active processes, including ones not associated
319 with the current shell, may be obtained using the \fIps\fP(1) command.
321 1.5\ File\ name\ generation
323 Many commands accept arguments
324 which are file names.
325 For example,
327         ls \(mil main.c
329 prints information relating to the file \fImain.c\fP\|.
331 The shell provides a mechanism
332 for generating a list of file names
333 that match a pattern.
334 For example,
336         ls \(mil \*(ST.c
338 generates, as arguments to \fIls,\fP
339 all file names in the current directory that end in \fI.c\|.\fP
340 The character \*(ST is a pattern that will match any string
341 including the null string.
342 In general \fIpatterns\fP are specified
343 as follows.
345 .IP \fB\*(ST\fR 8
346 Matches any string of characters
347 including the null string.
348 .IP \fB?\fR 8
349 Matches any single character.
350 .IP \fB[\*(ZZ]\fR 8
351 Matches any one of the characters
352 enclosed.
353 A pair of characters separated by a minus will
354 match any character lexically between
355 the pair.
358 For example,
360         [a\(miz]\*(ST
362 matches all names in the current directory
363 beginning with
364 one of the letters \fIa\fP through \fIz.\fP
366         /usr/fred/test/?
368 matches all names in the directory
369 \fB/usr/fred/test\fP that consist of a single character.
370 If no file name is found that matches
371 the pattern then the pattern is passed,
372 unchanged, as an argument.
374 This mechanism is useful both to save typing
375 and to select names according to some pattern.
376 It may also be used to find files.
377 For example,
379         echo /usr/fred/\*(ST/core
381 finds and prints the names of all \fIcore\fP files in sub-directories
382 of \fB/usr/fred\|.\fP
383 (\fIecho\fP is a standard UNIX command that prints
384 its arguments, separated by blanks.)
385 This last feature can be expensive,
386 requiring a scan of all
387 sub-directories of \fB/usr/fred\|.\fP
389 There is one exception to the general
390 rules given for patterns.
391 The character `\fB.\fP'
392 at the start of a file name must be explicitly
393 matched.
395         echo \*(ST
397 will therefore echo all file names in the current
398 directory not beginning
399 with `\fB.\fP'\|.
401         echo \fB.\fP\*(ST
403 will echo all those file names that begin with `\fB.\fP'\|.
404 This avoids inadvertent matching
405 of the names `\fB.\fP' and `\fB..\fP'
406 which mean `the current directory'
407 and `the parent directory'
408 respectively.
409 (Notice that \fIls\fP suppresses
410 information for the files `\fB.\fP' and `\fB..\fP'\|.)
412 Finally, the tilde character, `\fB\(ap\fP', may be used to indicate the
413 home directory of a user.
414 The `\fB\(ap\fP' at the beginning of a path name followed by a
415 non-alphabetic character expands to the current user's home
416 directory.
417 If the `\fB\(ap\fP' is followed by a login name, it expands to the named
418 user's home directory.
419 For example:
421         ls \(ap
422         cd \(apegbert/
424 will list the contents of the user's home directory and then change
425 to the home directory of the user ``egbert''.
427 1.6\ Quoting
429 Characters that have a special meaning
430 to the shell, such as \fB< > \*(ST ? \*(VT &\|,\fR
431 are called metacharacters.
432 A complete list of metacharacters is given
433 in appendix B.
434 Any character preceded by a \fB\\\fR is \fIquoted\fP
435 and loses its special meaning, if any.
436 The \fB\\\fP is elided so that
438         echo \\?
440 will echo a single \fB?\|,\fP
443         echo \\\\
445 will echo a single \fB\\\|.\fR
446 To allow long strings to be continued over
447 more than one line
448 the sequence \fB\\newline\fP
449 is ignored.
451 \fB\\\fP is convenient for quoting
452 single characters.
453 When more than one character needs
454 quoting the above mechanism is clumsy and
455 error prone.
456 A string of characters may be quoted
457 by enclosing the string between single quotes.
458 For example,
460         echo xx\'\*(ST\*(ST\*(ST\*(ST\'xx
462 will echo
464         xx\*(ST\*(ST\*(ST\*(STxx
466 The quoted string may not contain
467 a single quote
468 but may contain newlines, which are preserved.
469 This quoting mechanism is the most
470 simple and is recommended
471 for casual use.
473 A third quoting mechanism using double quotes
474 is also available
475 that prevents interpretation of some but not all
476 metacharacters.
477 Discussion of the
478 details is deferred
479 to section 3.5\|.
481 1.7\ Prompting
483 When the shell is used from a terminal it will
484 issue a prompt before reading a command.
485 By default this prompt is `\fB$\ \fR'\|.
486 It may be changed by saying,
487 for example,
489         \s-1PS1\s0="yesdear$ "
491 that sets the prompt to be the string \fIyesdear$\|.\fP
492 If a newline is typed and further input is needed
493 then the shell will issue the prompt `\fB>\ \fR'\|.
494 Sometimes this can be caused by mistyping
495 a quote mark.
496 If it is unexpected then entering the interrupt character
497 (typically \s-1CONTROL-C\s0) 
498 will return the shell to read another command.
499 This prompt may be changed by saying, for example,
501         \s-1PS2\s0=more
503 Entering the interrupt character may also be used to terminate most
504 programs running as the current foreground job.
506 (\s-1PS1\s0 and \s-1PS2\s0 are \fIshell variables\fP, which will be
507 described in section 2.4 below.)
509 1.8\ The\ shell\ and\ login
511 Following \fIlogin\fP(1)
512 the shell is called to read and execute
513 commands typed at the terminal.
514 If the user's login directory
515 contains the file \fB.profile\fP
516 then it is assumed to contain commands
517 and is read by the shell before reading
518 any commands from the terminal.
520 (Most versions of the shell also specify a file that is read and
521 executed on start-up whether or not the shell is invoked by login.
522 The \s-1ENV\s0 shell variable, described in section 2.4 below, can be
523 used to override the name of this file.
524 See the shell manual page for further information.)
526 1.9\ Summary
529 .IP \(bu
530 \fBls\fP
532 Print the names of files in the current directory.
533 .IP \(bu
534 \fBls >file\fP
536 Put the output from \fIls\fP into \fIfile.\fP
537 .IP \(bu
538 \fBls \*(VT wc \(mil\fR
540 Print the number of files in the current directory.
541 .IP \(bu
542 \fBls \*(VT grep old\fR
544 Print those file names containing the string \fIold.\fP
545 .IP \(bu
546 \fBls \*(VT grep old \*(VT wc \(mil\fR
548 Print the number of files whose name contains the string \fIold.\fP
549 .IP \(bu
550 \fBcc pgm.c &\fR
552 Run \fIcc\fP in the background.