home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / riscbsd / 1_1_contri / usd / 03_shell / t1 < prev    next >
Encoding:
Text File  |  1986-05-22  |  10.3 KB  |  449 lines

  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
  449.