mirror of https://github.com/tLDP/LDP
1152 lines
42 KiB
Plaintext
1152 lines
42 KiB
Plaintext
RELEASE HISTORY
|
|
------- -------
|
|
|
|
Version 0.4, released 07/09/01
|
|
|
|
Comments: Complete revision. The document is now the equivalent of a
|
|
300-page book.
|
|
|
|
Changes from version 0.3:
|
|
|
|
1) Substituted Emmanuel Rouat's new, improved Linux-specific .bashrc
|
|
file for the old one.
|
|
|
|
2)
|
|
In "External Filters, Programs, and Commands" section:
|
|
More info on "sleep".
|
|
Added "usleep".
|
|
More info on "diff", with note about using it to recursively compare
|
|
directories.
|
|
Added "diff3".
|
|
Added "sdiff".
|
|
Added "cmp".
|
|
Added example using "cmp", and cross referenced it to "exit status".
|
|
Added "hwclock/clock".
|
|
Added "locate/slocate".
|
|
Added "whatis", with example script.
|
|
Added "whereis".
|
|
Added "od".
|
|
Added "unexpand".
|
|
Added "install".
|
|
Added "crypt".
|
|
Added "write".
|
|
Added "compress/uncompress".
|
|
Added "gettext".
|
|
Added "printenv".
|
|
Added "tput".
|
|
More info on "fold" (-s option).
|
|
More info on "patch".
|
|
More info on "join".
|
|
More info on "tar".
|
|
More info on "tr".
|
|
More info on "dd".
|
|
More info on "logger".
|
|
More options for "cat".
|
|
More options for "cp".
|
|
Added cautionary note to "tar".
|
|
Added --count and --invert-match options to "grep".
|
|
Extra options and code snippets for "find".
|
|
Using "echo" to feed a command sequence into a pipe and set a variable,
|
|
with illustrative code snippets.
|
|
Added subsection for "Terminal Control Commands" (tput, clear, reset,
|
|
script).
|
|
Added subsection for "Math Commands" (factor, bc/dc).
|
|
|
|
3) Moved subsection on "Here Documents" to right after "I/O Redirection" (much
|
|
more logical).
|
|
|
|
4) Added more reasons not to use shell scripts.
|
|
|
|
5) Added info about the "widtools" (widget tools) package to "Assorted Tips"
|
|
subsection of "Miscellany".
|
|
|
|
6) Corrected "Born-Again Shell" to "Bourne-Again Shell" (thanks to Jan
|
|
Svenungson for pointing this out).
|
|
|
|
7) In "System and Administrative Commands" section:
|
|
Added "dumpe2fs".
|
|
Added "tune2fs".
|
|
Added "fdisk".
|
|
Added "mke2fs".
|
|
Added "fsck", "e2fsck", and "debugfs".
|
|
Added script using "fdisk" and "mke2fs".
|
|
Added "df".
|
|
Added "du".
|
|
Added "mesg".
|
|
Added tip.
|
|
Added "procinfo".
|
|
Added "ac"
|
|
Added "last"
|
|
Added "tset"
|
|
Added "getty" and "agetty".
|
|
Added "chown/chgrp".
|
|
Added "useradd/userdel".
|
|
Added "logrotate".
|
|
Added "dump/restore".
|
|
Added "stat".
|
|
Added "rdist".
|
|
Added "losetup".
|
|
Added "lastcomm".
|
|
Added "mkswap".
|
|
Added "swapon/swapoff".
|
|
Added "newgrp".
|
|
More info on "chroot".
|
|
More info on "netstat".
|
|
More info on "ifconfig".
|
|
More info on "route".
|
|
More info and example added on "mount".
|
|
Added note to "umount".
|
|
Usage example on "lsmod".
|
|
Removed inappropriate spacing in "wall" listing and added note.
|
|
|
|
8) In "Internal Commands" section:
|
|
Added "pstree".
|
|
Added "type".
|
|
Added "help".
|
|
Added footnote on "forking".
|
|
More info on "kill".
|
|
Added example to "unset".
|
|
More options and info added to "read".
|
|
|
|
9) Additional clarification of "for" loops.
|
|
|
|
10) Added using C-like syntax in a "for" loop to "Loops" section,
|
|
with illustrative example.
|
|
Did the same with a "while" loop.
|
|
Cross-references to examples in "Miscellany / Assorted Tips" section.
|
|
|
|
11) Added using command substitution to generate [list] in a "for" loop.
|
|
Same for a "case" construct.
|
|
Examples added.
|
|
|
|
12) In "Variables Revisited" section, added C-type variable manipulation,
|
|
using the ((...)) construct [Chet Ramey's Easter Egg, actually borrowed
|
|
from ksh93].
|
|
|
|
13) In "Gotchas" section,
|
|
Added scripts with DOS-type newlines.
|
|
Added script invoked with "/bin/sh" maybe not fully Bash-compatible.
|
|
|
|
14) In "Files" section, added ~/.bash_logout.
|
|
|
|
15) In "Variables Revisited" section,
|
|
Moved note about certain variables not internal to Bash to a more logical location.
|
|
Added short note about using /dev/urandom to generate (useless) random numbers.
|
|
Added $LINENO to internal variables.
|
|
Added illustrative script ("am-i-root.sh") to "UID" discussion.
|
|
Fixed "dubugging" typo.
|
|
|
|
16) In "Bibliography" section,
|
|
Added four sites for example shell scripts.
|
|
Added reference to Rick Hohensee's shell-scripted virtual machine + assembler.
|
|
|
|
17) Added "mail-format.sh" to "Contributed Scripts" section.
|
|
|
|
18) In "Tests" section:
|
|
Clearer definition of what "test" actually means.
|
|
Add info about "-g", "-u", and "-k" flags.
|
|
Clarified examples of "integer tests" (used if [ "$a" XX "$b" ] to illustrate).
|
|
|
|
19) Fixed syntax error in "ex45.sh" (embarrassing).
|
|
|
|
20) Added piping the output of a "for" loop to a command.
|
|
|
|
21) Mention /usr/include/sysexits.h as an attempt at systematizing exit status
|
|
numbers.
|
|
|
|
22) Added "string.sh", a "Contrib Script" by Noah Friedman.
|
|
|
|
23) Alphabetized listing of internal Bash variables in "Variables Revisited"
|
|
section. It looks more professional now.
|
|
|
|
24) Added subsection on "Nested Loops" to "Loops" section.
|
|
Added illustrative example script.
|
|
|
|
25) Added subsection on "Nested if/then Condition Tests" to "Tests" section.
|
|
|
|
26) In "Here Documents" section,
|
|
Added - option.
|
|
Added passing parameters to body of here document, with examples.
|
|
Added disabling parameter replacement by quoting or escaping.
|
|
|
|
27) In "Special Characters" section,
|
|
Added info on "-" redirection operator.
|
|
Added quotes ("").
|
|
Added strong quotes ('').
|
|
Added escape (\).
|
|
Added backticks (`).
|
|
Added using ":" for comment line (not recommended).
|
|
Added "*".
|
|
Added "$*" and "$@".
|
|
Piping the output of command(s) to a script.
|
|
More info on "!" operator.
|
|
Annotated Alan Cox's one-liner script.
|
|
Added "_" (underscore).
|
|
|
|
28) Reorganized "Loops" section; created new subsection and reshuffled.
|
|
|
|
29) Added instance of "unset" to when a variable appears "naked" (without the
|
|
$ prefix). Thanks to Florian Wisser for pointing this out.
|
|
|
|
30) Rewrote "Command Substitution" section (formerly named "Backticks").
|
|
Split off "Arithmetic Expansion" as a separate section, and added
|
|
material.
|
|
|
|
31) Added "bc" and "dc" to "External Filters" section, with elegant
|
|
illustrative script by Heiner Steven.
|
|
Added more info on "bc", with "monthlypmt.sh" illustrative example.
|
|
|
|
32) Added new section on "/dev and /proc".
|
|
Added illustrative examples.
|
|
|
|
33) Made a number of corrections and clarifications, as pointed out by Heiner
|
|
Steven. Thanks!
|
|
Some UNIX flavors take a 4-byte magic number...
|
|
Too many script headers on one line in "magic number" example listing.
|
|
Example "ex2.sh", added comment that "> filename" is equivalent to "cat /dev/null > filename".
|
|
Example "ex2.sh", quoted parameter.
|
|
Omitting [list] in a "for" loop assumes "$@", rather than "$*".
|
|
Clarified that a "flag" acts as a semaphore, rather than as a signal.
|
|
Added comment that {code block} does not launch a subshell to
|
|
"Special Characters" section.
|
|
At his suggestion, added a couple of more examples on "~" in
|
|
"Special Characters" section.
|
|
Added his "allprofs" script to "Subshells" section (with modifications
|
|
by HOWTO author).
|
|
Noted that some substitution operators come from ksh93.
|
|
Noted that a line of code in a script ending in a pipe character does
|
|
not require an escape to continue to the next line.
|
|
Code snippet on how to redirect "read" through an entire file, line by
|
|
line.
|
|
Added note that "declare" is Bash-specific.
|
|
Added code snippet explaining use of $IFS with "read"
|
|
Added alternate example of redirected "while" loop to "I/O Redirection"
|
|
section.
|
|
|
|
34) Added comments to "Subshells" section.
|
|
|
|
35) In "strip-comments.sh" example script, changed "=" to "-eq" (bugfix).
|
|
|
|
36) Changed all instances of "white space" to "whitespace" for consistency
|
|
(picky, picky).
|
|
|
|
37) Added pitfalls of variables in a subshell with illustrative example to
|
|
"Gotchas" section.
|
|
|
|
38) Added using Bash-specific functionality in a Bourne shell script on a
|
|
generic UNIX machine to "Gotchas" section.
|
|
|
|
39) Added another example to "List Constructs" section.
|
|
|
|
40) Added using positional paramters > $9, using {bracket} notation (thanks,
|
|
Philippe Martin).
|
|
|
|
41) Added -N and -t file tests to "Tests" section.
|
|
|
|
42) In "Arrays" section:
|
|
Added "q-function.sh" (Hofstadter's Q-function) as an illustrative
|
|
example.
|
|
Added "twodim.sh" simulation of a two-dimensional array.
|
|
|
|
43) Added two new entries to "Bibliography" section.
|
|
|
|
44) Added more info in "Quoting" section.
|
|
|
|
45) Bugfix: removed an extraneous header from "source/dot" command in "Special
|
|
Characters" section.
|
|
|
|
46) Added a caution about confusing REs with "globbing" to "Regular
|
|
Expressions" section.
|
|
|
|
47) In "Loops" Section:
|
|
Added filename "globbing" in for-loop [list].
|
|
Added "break N", breaking out of multiple loop levels.
|
|
Added "continue N", continuing at a higher loop level.
|
|
Added footnote to "Loop Control Commands" subsection noting that
|
|
"break" and "continue" are shell builtins.
|
|
|
|
48) Removed commented-out SGML code for article header. That makes it official
|
|
that this document is a book.
|
|
|
|
49) Added new appendix on "Converting DOS Batch Files to Shell Scripts".
|
|
|
|
50) Added "findstring.sh", illustrative example for generating [list] in a
|
|
"for" loop with command substitution and for "strings" command in
|
|
"External Filters, Programs, and Commands" section.
|
|
|
|
51) More info on "exit status".
|
|
|
|
52) Added appendix for "Exit Codes With Special Meanings".
|
|
|
|
53) Added "!" to "Special Characters" section.
|
|
|
|
54) Added "==" to "Tests" section.
|
|
|
|
55) Added a couple of examples and more explanation to "Regular
|
|
Expressions" section.
|
|
|
|
56) Extra notes on $BASH_VERSION.
|
|
|
|
57) In "Functions" section:
|
|
Added directing the stdin of a function, with illustrative example.
|
|
Added footnote to "return" command, noting that it is a Bash builtin.
|
|
|
|
58) Added "[[ ]]" construct to "Tests" section.
|
|
|
|
59) In "bubble.sh", fixed spelling of "Zaire" and changed "Kashmir" to "Kenya"
|
|
(it was pointed out that Kashmir is not a country).
|
|
|
|
60) Added "file-info.sh", illustrative example of a variable containing the
|
|
[list] in a "for" loop.
|
|
|
|
61) Added a section on "Scripting With Style", stylistic guidelines.
|
|
* Script and function headers added.
|
|
* Descriptive names for variables added.
|
|
|
|
62) Added "copy-cd.sh", a script for copying data CDs, to "Contributed
|
|
Scripts" section.
|
|
|
|
63) In "Loops" section, separated "Loop Control Commands" ("break" and "continue")
|
|
into a separate subsection.
|
|
|
|
64) Added note to "Tests" section that after "if", "test" or test brackets not
|
|
strictly necessary. Similarly, test brackets do not necessarily require an
|
|
"if" when used with "list constructions".
|
|
|
|
65) Once more, checked all the examples for stylistic correctness.
|
|
|
|
66) In "Variables Revisited" section:
|
|
Added "random-test.sh", testing the randomness of RANDOM.
|
|
Added "seeding-random.sh", reseeding the RANDOM generator.
|
|
|
|
67) Reshuffled some commands into different subsections in "External
|
|
Filters, Programs, and Commands" section.
|
|
|
|
68) Added "isalpha.sh" example to "case" constructs in "Loops" section.
|
|
|
|
69) Added inline example in "Regular Expressions" section.
|
|
|
|
70) Moved "ex50.sh" from "pr" to "fmt" in "External Filters, Programs, and
|
|
Commands" section.
|
|
|
|
71) Added "du.sh" example to "tr" in "External Filters, Programs, and
|
|
Commands" section.
|
|
|
|
72) Clarification on ${var#pattern}, ${var%pattern} variable substitution
|
|
in "Variables" section, and added "patt-matching.sh" example to
|
|
illustrate.
|
|
|
|
73) Clarifications on "ex14.sh" example.
|
|
|
|
74) In "Internal Commands and Builtins", fixed explanation on
|
|
"getopts" and associated "ex33.sh" to make usage consistent with
|
|
accepted usage. (Thanks, Ueli Strasser)
|
|
|
|
75) Fixed typos:
|
|
("suppress" --> "suppresses") in "Here Documents section.
|
|
("inderect" --> "indirect") in "Variables Revisited" section.
|
|
"Option" left out in "type" discussion.
|
|
|
|
76) More on "%" (modulo) operator in "Operations" section.
|
|
|
|
77) Added "> &FD" and "n<>filename" to "I/O Redirection" section.
|
|
|
|
78) Fixed bug in "ex2.sh" example (removed "or-list"),
|
|
and added cautionary not on "or lists".
|
|
|
|
79) More explanation on meaning of "keyword".
|
|
Noted that "!" is a keyword.
|
|
|
|
80) Moved "printf" and "eval" from "External Commands" to "Internal
|
|
Commands" section.
|
|
|
|
81) Fixed up some cross-reference links.
|
|
|
|
82) In "Sha-bang" section:
|
|
Added footnote with self-deleting script example.
|
|
Added footnote about invoking script with "sh scriptname" turning off
|
|
Added footnote about invoking a script with "./scriptname".
|
|
Bash-specific extensions.
|
|
Minor cleanups.
|
|
|
|
83) Cleaned up "filename" referenced.
|
|
Made references to "stdin" and "stdout" consistent (<filename>).
|
|
|
|
84) Added footnote about "dotfiles".
|
|
|
|
85) Noted that "logname" is not exact equivalent to "whoami", with example.
|
|
Correction: "trap 2" changes to "trap '' 2" in "Debugging" section.
|
|
Thank you, Nick Drage.
|
|
|
|
86) Fixed typos pointed out by Hyun Jin Chan.
|
|
Typo in "ex13.sh".
|
|
Typo in "ex41.sh".
|
|
In "Here Documents" section, changed
|
|
"feeding input into non-interactive programs" to
|
|
"feeding input into interactive programs".
|
|
|
|
87) Added footnote about "magic numbers" used in the context hard-wired
|
|
constants in "Scripting With Style" section.
|
|
|
|
88) Added "End Notes" chapter, which includes "Author's Note" and "Tool Used
|
|
to Produce This Book".
|
|
|
|
89) Added footnote about shell script naming conventions to "Why Shell
|
|
Programming?" section.
|
|
|
|
90) Changed all <errorcode> tags to the more appropriate <returnvalue>.
|
|
|
|
91) Added info about Korean translation of the document to "Copyright"
|
|
section.
|
|
|
|
92) Added "${#variable}" construct to "Parameter Substitution" subsection in
|
|
"Introduction to Variables and Parameters" section, mentioning exceptional
|
|
cases of "${#*}" and"${#@}".
|
|
|
|
93) Reorganized "I/O Redirection" section (subdivided into subsections).
|
|
|
|
94) Reorganized "Functions" section (subdivided into subsections).
|
|
|
|
95) Added example snippets to "Process Substitution" section.
|
|
|
|
96) Added Nick Drage's comments to "online.sh" in "Debugging" section.
|
|
|
|
97) Tidied up "Operations and Related Topics" section.
|
|
|
|
98) Fixed typos in "ex79.sh" ("suite" -> "suit").
|
|
|
|
99) Fixed other minor typos in the document.
|
|
|
|
100) Stephane Chazelas sent in long lists of corrections and suggestions.
|
|
Bug fixes, improvements, and comments on "ex2.sh" example.
|
|
Bug fixes and improvements to "ex3.sh" example.
|
|
Improvement on "ex4.sh", "ex5.sh", and "ex14.sh" examples.
|
|
Suggestion for "col-totaler.sh" example.
|
|
Code snippet on use of "case" for parsing command-line args.
|
|
In "brace expansion" discussion, pointed out that spaces permitted when
|
|
quoted or escaped.
|
|
Improved "ex8.sh" to read more than one line (more useful as an
|
|
example).
|
|
Resolve ambiguity about "-", which is not a Bash operator.
|
|
Suggested workarounds for filenames starting with "-" used with "-"
|
|
redirection operator.
|
|
Added safer alternatives to "ex58.sh".
|
|
In "Why Shell Programming?" section, modified footnote to state that
|
|
user-written scripts with ".sh" extension should be Bourne shell
|
|
compliant.
|
|
In "Command Substitution" section:
|
|
Added notes.
|
|
Added explanation in code snippet on command output.
|
|
Note that newline deletion may result from word splitting.
|
|
Added example snippets of trailing newline deletion.
|
|
In "Special Characters" section:
|
|
Fixed typo at beginning of "#" (comment) listing.
|
|
Added note about "#" not denoting a comment in certain constructs.
|
|
"${parameter?err_msg}, ${parameter:?err_msg}"
|
|
Added note that non-interactive script exits with code 127.
|
|
Added note about escaping "#" in echo statements.
|
|
Added caution about variable value starting with "-n".
|
|
More on "~" expansion.
|
|
Changed "noclobber" environmental variable (obsolete) to option.
|
|
Added "array initialization" to "()" listing.
|
|
Added notes to "brace expansion".
|
|
Added notes and made corrections to "ex6.sh" example.
|
|
Added note and example demonstrating that a code block in braces
|
|
may run as a subshell.
|
|
Clarification on "pipes".
|
|
Note on Alan Cox's directory copy method.
|
|
Noted that ":" is a shell builtin.
|
|
Noted that ": >>" applies only to regular files.
|
|
Fixed error about "code block" { ... }.
|
|
Added note about variables defined within (...) not being visible to
|
|
rest of script.
|
|
Fixed error on "{}\" construct, and added note.
|
|
Change to "uppercase.sh" in-line example.
|
|
Added "{#array}" as string length of first element of array.
|
|
Added cautionary note about reserved exit status codes to "Exit Status" section.
|
|
In "Variables" section:
|
|
Added comments and clarifications to "ex7.sh".
|
|
Added comments and clarifications to "ex9.sh".
|
|
Added info per his comments on the $'...' string expansion construct.
|
|
In "Quoting" section:
|
|
Added more examples of escaping a newline in variable assignment.
|
|
Clarified and corrected info about quoting variables "echoed", with
|
|
Added illustrative examples.
|
|
Replaced flawed example snippet ("bash$ echo [Ff]irst")
|
|
Fixed bug, changed ' to ` in referencing within double quotes.
|
|
Clarified and corrected "toggling on" special meanings of characters
|
|
by escaping.
|
|
In "Tests" section:
|
|
Added detailed explanation about "if/then" construct, "[", and "test".
|
|
Added clarification about "[", "[[" , and "test".
|
|
Added arithmetic tests using "(( ))".
|
|
Added notes to "ex10.sh" example.
|
|
Clarification on "ex12.sh", and moved it to "External Filters..." section.
|
|
Pointed out that one should always quote a string being tested.
|
|
Clarified what happens when erroneously putting a space in an
|
|
assignment statement.
|
|
Added example on using arithmetic operations (arithops.sh).
|
|
Clarification and corrections on "-t" test option.
|
|
Clarification on "-r" test option.
|
|
Clarification on "-w" test option.
|
|
Clarification on "-g" test option.
|
|
Clarification on "-u" test option.
|
|
Clarification on "-k" test option.
|
|
Clarification on "-n" test option.
|
|
Clarification on "str-test.sh" example.
|
|
Clarification and example on "==".
|
|
Clarification on pattern matching with "!=".
|
|
Clarification on "&&" and "||" comparison operators.
|
|
Fixup on "arith-tests.sh" example.
|
|
Clarification and corrections on "ex14.sh" example.
|
|
In "Operations" section:
|
|
Fixed "=" in-line example.
|
|
Fixed "+=" and "*=" example snippets.
|
|
Fixed typo: 'if "Xstring1" = "Xstring2" ] is safer,'.
|
|
Retitled subsections to avoid reader confusion.
|
|
Added example snippet on using "&&" and "||" in an arithmetic
|
|
context.
|
|
Added note to "arith-ops.sh".
|
|
Added note to "and-or.sh".
|
|
Fixed typo (lost space) in in-line "&&" example.
|
|
Clarified "numbers.sh" example.
|
|
Clarification on "&&" and "||".
|
|
In "Variables Revisited" section:
|
|
More clarifications and example snippets + "ifs.sh" example for "$IFS".
|
|
Clarified use of "$PATH" variable.
|
|
Cleared up confusion on "$PPID".
|
|
Cleared up confusion on "$@".
|
|
Added "incompat.sh" and "ifs-empty.sh" examples on inconsistent
|
|
"$*" and "$@" behavior.
|
|
Plugged a possible hole in "wipedir.sh" example script and added
|
|
comments.
|
|
Added "timeout.sh", another example of timed input.
|
|
Explanation (footnote) on environmental variables.
|
|
Explanation (footnote) on parameter $0.
|
|
Corrected "declare -f" listing.
|
|
Clarification on "ind-ref.sh" example.
|
|
Clarification on $SHELL variable.
|
|
Clarification on $HOSTNAME variable.
|
|
Added "col-totaler2.sh" as an example of indirect references.
|
|
Fixed typo "that that".
|
|
Fixup on "ex17.sh".
|
|
Fixup on "ex20.sh".
|
|
Added comment to "ex21.sh".
|
|
In "Loops" section:
|
|
Fixed error: semicolon *after* [list].
|
|
Additional clarification in "ex22a.sh" example.
|
|
Quoted arguments in [list] in for-loop illustration.
|
|
Removed reference to REs in filename globbing.
|
|
Fixup and note added to "list-glob.sh" example.
|
|
Added note to "bin-grep.sh" example.
|
|
Added note to "ex24.sh" example.
|
|
Correction on "ex26a.sh" example.
|
|
In "case" constructs:
|
|
Noted that variable quoting not mandatory.
|
|
Corrected and clarified comment in command line parameter testing.
|
|
Changed "regular expression" filtering to "globbing" filtering.
|
|
Improved "isalpha.sh" example.
|
|
In footnote, cleared up some confusion about builtins.
|
|
Moved 'basename', 'dirname', and 'factor' from "Internal Commands"
|
|
to "External Filters, Programs, and Commands" section.
|
|
Minor clarification on "read-redir.sh" example.
|
|
Alternatives added to "realname.sh" example.
|
|
In "Internal Commands and Builtins" section:
|
|
Corrections on "ps", "suspend", "command", and "builtin".
|
|
Moved "echo", "cd", and "let" here from "External Commands"
|
|
section.
|
|
Note on "echo" deleting linefeeds in command output.
|
|
Added in-line examples for "echo".
|
|
Correction on "find" (-exec).
|
|
Added "col-totaler3.sh" as an example of using "export" to
|
|
pass a variable to an embedded awk script.
|
|
Removed "stop" (how the heck did a "csh" command sneak in?).
|
|
Removed "." from examples of builtins.
|
|
Minor fixup on "ex33.sh" example.
|
|
Added cautionary note on "eval".
|
|
Added examples ("rot13_2.sh") to "eval".
|
|
Added long note to "jobs" command clarifying difference between jobs
|
|
and processes.
|
|
Added in-line example on "printf".
|
|
Clarified "keyword" definition.
|
|
Fixed typos in "read" and "find" command subsections.
|
|
In "External Filters, Programs, and Commands" section:
|
|
Clarifications on "chmod" and "chattr".
|
|
Added alternative method in "ex57.sh" example.
|
|
Clarification on "ex42.sh" example.
|
|
Clarification on "ex44.sh" example.
|
|
Clarification on "ex45.sh" example.
|
|
Option "-c" to "uniq" discussed.
|
|
Correction on "cut".
|
|
Clarification on "colrm".
|
|
Clarification on "join".
|
|
Clarification on "head", and added example "rnd.sh".
|
|
Concise form of "lookup.sh".
|
|
Clarification on "gs".
|
|
Added notes on "wc" (and fixup of example).
|
|
At "grep":
|
|
Additional minor fixups.
|
|
Note in "grp.sh" script.
|
|
Added usage examples for "-c" and "-z" options.
|
|
Added note on "time" about it becoming a reserved word.
|
|
Clarification and corrections on "tr".
|
|
Clarification in "ex49.sh" and "rot13.sh".
|
|
Added alternative code to "lowercase.sh".
|
|
Added note to "fmt" about Kamil Toman's "par" utility.
|
|
Added note to "line-number.sh" script about '-ba' option to 'nl'.
|
|
Clarification and fixup on "pr".
|
|
Added note to "zcat".
|
|
Added alternative code to "strip-comments.sh".
|
|
Fixed "lp".
|
|
Added two usage examples for "yes".
|
|
Added altenative methods to "find" in-line example.
|
|
Fixed format in "cat/tac" in-line example.
|
|
Added long note to "xargs".
|
|
Added note to "touch", and link from ":" in "Special Characters"
|
|
section.
|
|
Fixup on "zcat" in "gzip" subsection, and fixed typo there.
|
|
At "dd":
|
|
Added usage examples".
|
|
Fixed comments "dd-keypress.sh".
|
|
Fixed typo on "grep".
|
|
Explanatory note on "-maxdepth" option for "grep".
|
|
In "System Commands" section:
|
|
Moved "shopt" to "Internal Commands and Builtins".
|
|
More info on "who".
|
|
Correction and clarification on "hostname".
|
|
More info on "env".
|
|
Added "lsof".
|
|
Clarification on "pidof".
|
|
Moved "exec" to "Internal Commands and Builtins" and made some
|
|
corrections in the commentary.
|
|
Using "stty" to detect keypress, with illustrative example.
|
|
Fixup on "chgrp".
|
|
Fixup on "nice".
|
|
Fixup on "sync".
|
|
Added "createfs" example to illustrate "losetup".
|
|
At "stty", added long sidebar explaining canonical mode in terminals.
|
|
Fixup and additional illustrations on example.
|
|
Additional commentary on "ifconfig" code snippets.
|
|
Clarifications in "Arithmetic Expansion" section.
|
|
In "I/O Redirection" section:
|
|
Added note to "redir1.sh" example.
|
|
Added note to "redir2.sh" example.
|
|
Clarifications and notes added on "redir2a.sh", "redir3.sh",
|
|
"redir4.sh", and "redir5.sh" examples.
|
|
Added ": >" file truncation note.
|
|
Added examples (programlisting) of word splitting.
|
|
Added example of newline deletion.
|
|
Fixups (removed extraneous spaces in redirection operators in example
|
|
snippets).
|
|
Added alternative forms of operators that close file descriptors.
|
|
Added note and code snippet to "Closing File Descriptors" subsection.
|
|
Added "logevents.sh" example of using redirection operations in event
|
|
logging.
|
|
Added example snippet for "[j]<>filename".
|
|
In "Gotchas" section:
|
|
Fixed errors in using bad variable names.
|
|
Stylistic notes added.
|
|
Added note about attempting to use "-" as redirection operator.
|
|
Added notes and in-line example snippets about mixing up "=" and "-eq".
|
|
Correction on making script "suid".
|
|
Corrections and explanatory notes in "Regular Expressions" section.
|
|
Notes about "+" and curly brackets in "gawk".
|
|
Note and example ("newline.sh") about using "." to match newlines.
|
|
Footnote about matching dotfiles with globbing.
|
|
In "Subshells" section:
|
|
Fixup on in-line example.
|
|
Added example of subshell redirection.
|
|
Setting up a "dedicated environment" for a command group.
|
|
Added comment to code snippet illustrating parallel processes.
|
|
Added note about I/O redirection to subshells.
|
|
In "Functions" section:
|
|
Fix up and elaborate "ex60.sh" example.
|
|
Example ("ref-params.sh") of passing reference parameters to functions.
|
|
Comments and example on recursion.
|
|
Note and example snippet on declaring functions before calling them.
|
|
Note and example snippet on nested function.
|
|
Note and example snippet on function declarations in unlikely places.
|
|
Note and example snippet on using dedicated variables for return values.
|
|
Note and example snipptets on an alternative method of redirecting
|
|
the stdin of a function.
|
|
In "List Constructs" section:
|
|
Note and example snippets on operator precedence in compound
|
|
statements.
|
|
In "Arrays" section:
|
|
Added notes to "ex67.sh".
|
|
Added alternative implementation to "ex68.sh".
|
|
Added notes and example snippet on ${xxx[@]} and ${xxx[*]} notation.
|
|
Added notes to "twodim.sh" example.
|
|
Added "{#array}" as string length of first element of array.
|
|
Added "empty-array.sh" example.
|
|
In "Files" section, clarification on "/etc/profile".
|
|
In "Exit and Exit Status" section, added clarifying notes in in-line
|
|
example.
|
|
In "Here Documents" section:
|
|
Added note to "ex71.sh".
|
|
Fixup on "ex71c.sh".
|
|
Added note and example on "anonymous here documents".
|
|
Removed caution about pagers not working in a here document.
|
|
Added note about temporary files used by here documents.
|
|
In "Zeroes and Nulls" section, added note about ": >" alternate to
|
|
"cat /dev/null >".
|
|
In "Process Substitution" section:
|
|
Fixed error in note about not leaving space between ">(command)".
|
|
Changed "(command)>" to correct ">(command)".
|
|
Added example snippets.
|
|
In "Debugging" section:
|
|
Added commentary after "test24, another buggy script".
|
|
Correction on "exit" sending signal 0.
|
|
Added note and example ("vartrace.sh") in trapping discussion.
|
|
Notes added to "online.sh".
|
|
In "Miscellany" section:
|
|
Added using "[[ ]]" and "(( ))" in comparisons.
|
|
Corrections in discussion of interactive shells, plus
|
|
illustrative example.
|
|
In "Contributed Scripts" section:
|
|
Added "primes.sh" to demonstrate that arrays are not need to
|
|
generate prime numbers.
|
|
Added comments to "manview.sh"
|
|
Added comment to "tree.sh"
|
|
Added "obj-oriented.sh" example of object-oriented programming in a script.
|
|
Fixed error in comment in "pw.sh"
|
|
Notes on "string.sh".
|
|
In "Sed and Awk Micro-Primer" section, corrections, clarifications,
|
|
additions, and more examples.
|
|
In "Sample .bashrc File" appendix, correction pointing out that only
|
|
interactive shells read ".bashrc".
|
|
In "Sha-Bang" section:
|
|
Added note about the "#!" line being interpreted as a comment
|
|
by the command interpreter.
|
|
Added note about script needing read, as well as execute permission.
|
|
Added note about starting a "README" file with "#!/bin/more".
|
|
In "/dev and /proc" section:
|
|
Added note that /dev/sndstat has been eliminated as of the 2.3
|
|
kernel.
|
|
Clarification on virtual devices.
|
|
Simplified code snippets illustrating "extracting data" from /proc files.
|
|
Noted that /dev is not a file system.
|
|
Added commentary to "pid-identifier.sh" example.
|
|
Fixed error in footnote: entries in /dev do take up some space.
|
|
In "Options" section:
|
|
Clarified "-c" option.
|
|
Added note to "-u" option.
|
|
Fixed typo (--arg1arg2) on "--" (changed to "-- arg1 arg2")
|
|
In "Converting DOS Batch Files" section:
|
|
Removed unnecessary variable from "viewdata.sh" example.
|
|
Fixups on tables of DOS batch file / shell script equivalents.
|
|
In "Scripting With Style" section:
|
|
Fixup on example script.
|
|
Noted that "exit status" of a script is available to the parent process
|
|
of that script, not necessarily the shell.
|
|
Rewritten version of "example 3-2".
|
|
Added "A Detailed Introduction to I/O Redirection" appendix.
|
|
Added "Localization" appendix.
|
|
Made corrections.
|
|
|
|
|
|
|
|
|
|
======================================================================================
|
|
|
|
Version 0.3, released 02/12/01
|
|
|
|
Comments: Another major improvement. The HOWTO is nearly book length,
|
|
still evolving toward becoming a GUIDE.
|
|
|
|
Changes from version 0.2:
|
|
|
|
1) Fixed:
|
|
Renamed Example A-2 in Appendix A (Contributed Scripts) to
|
|
"encryptedpw". It had previously been named "manview", duplicating
|
|
the title of Example A-1.
|
|
|
|
2) In Chapter 1, the reader is now advised to use the example scripts
|
|
(something-or-other.sh), as an alternative to laboriously
|
|
cutting-and-pasting from rendered HTML.
|
|
|
|
3) In "Special Characters" section, added brace expansion {xxx,yyy,zzz...}.
|
|
|
|
4) Deleted the erroneous statement that the "set -r" option cannot be
|
|
invoked from within a script.
|
|
|
|
5) Added section for "restricted shells" with additional info.
|
|
|
|
6) Added a couple of script options.
|
|
|
|
7) Fixed minor bug in code snippet in "Interactive Scripts" section.
|
|
|
|
8) More info on interactive scripts.
|
|
|
|
9) Fixed an error confusing '$#' with '$*' in "Loops" section and in ex23.sh.
|
|
|
|
10) Added Antek Sawicki's random password script in contrib scripts.
|
|
|
|
In "External Filters, Programs, and Commands" section:
|
|
------------------------------------------------------
|
|
11) More accurately described the "{} \;" arguments to "find" command. Thanks
|
|
to Jim Van Zandt for pointing this out.
|
|
|
|
12) Added note to "xargs" that "echo" is default command. Again thanks
|
|
to Jim Van Zandt.
|
|
|
|
13) Fixed error claiming "diff" needs sorted files. Jim Van Zandt again.
|
|
|
|
14) Cleared up ambiguity about "colrm".
|
|
|
|
15) More info on "umask" and corrections.
|
|
|
|
16) Added "mkfifo".
|
|
------------------------------------------------------
|
|
|
|
17) Added cross-reference on "&&".
|
|
|
|
18) Added cross-reference to embedded sed script.
|
|
|
|
19) Added example of embedded awk script (col-totaler.sh).
|
|
|
|
20) Fixed clumsy wording in sed and awk description.
|
|
|
|
21) Added "su" to "System and Administrative Commands" section.
|
|
|
|
22) Added Jim Van Zandt's "daily backup" example script
|
|
to "Contrib-Scripts" section.
|
|
|
|
23) Enhanced example 66 (ex66.sh) on arrays with more methods of initializing
|
|
array variables.
|
|
|
|
24) Corrected "Siever" entry in bibliography.
|
|
|
|
25) Added Jordi Sanfeliu's "tree" script to "Contrib-Scripts" section.
|
|
|
|
26) Added Robbins' "Bash Reference Card" to bibliography.
|
|
|
|
27) Added reference to Duarte's sed tutorial in bibliography.
|
|
|
|
28) Added "rn.sh", file rename utility to "Contrib-Scripts" section.
|
|
|
|
29) Added "initializing multiple variables on same line" to ex9.sh.
|
|
|
|
30) Fixed title on "ex52.sh".
|
|
|
|
31) Added a case when not to use shell scripts, in intro.
|
|
|
|
32) Added shell script as embedded command in another script, Tcl or wish
|
|
script, etc. to "Miscellany / Assorted Tips" section.
|
|
|
|
33) Added download link for latest version of document to intro.
|
|
|
|
34) Added "id" to "System and Administrative Commands" section.
|
|
|
|
35) Added "stty" to "System and Administrative Commands" section.
|
|
|
|
36) Added "strip-comments.sh" example to illustrate "file" command,
|
|
and "rot13.sh" example to "tr" command, in "External Filters" section.
|
|
|
|
37) Added "modular approach" sidebar to Chapter 2, section 1.
|
|
|
|
38) Added example cross-references to use of REs in scripts by sed,
|
|
awk, and Perl.
|
|
|
|
39) More info and clarification on command substitution and arithmetic
|
|
expansion in "Backticks" section.
|
|
|
|
40) Corrected "Bibliography" section entry for Ben Okopnik's introductory
|
|
Bash scripting articles in "Linux Gazette".
|
|
|
|
41) Added "Bibliography" section entries for "Bash-Prompt HOWTO" and
|
|
"Bash-Programming-Intro HOWTO".
|
|
|
|
42) Added $OLDPWD, $BASH_VERSION, $DIRSTACK, $HOSTNAME, $PPID, $MACHTYPE,
|
|
$HOSTTYPE, $OSTYPE, $UID, $EUID, $SHELLOPTS, $IGNOREEOF, and $GROUPS
|
|
to internal Bash variables in "Variables Revisited" section.
|
|
|
|
43) Added info on the "-" operator (may also be interpreted as "old
|
|
working directory", depending on context).
|
|
|
|
44) Added collecting favorite definitions and functions into "library file" to
|
|
"Miscellany / Assorted Tips" section.
|
|
|
|
45) Added cross reference from "dot" command to "source", later on in
|
|
tutorial.
|
|
|
|
46) In "Special Characters" section, noted that a command may not follow
|
|
a comment on the same line.
|
|
|
|
47) Added section on "Aliases", including two example scripts.
|
|
|
|
48) Added discussion of "for" loops with multiple parameters in each [list]
|
|
element to "Loops Section".
|
|
|
|
49) Added discussion of "while" loops with multiple conditions to "Loops
|
|
Section".
|
|
|
|
50) Added cross-reference to mention of "getopts" in "while loops" discussion.
|
|
|
|
51) Added cross-reference on "exec" in "System and Administrative Commands"
|
|
section back to use of "exec" in "find" command sequence in "External
|
|
Filters, Programs, and Commands" section. Added other cross-references in
|
|
this section.
|
|
|
|
52) Added footnote about fd 5 being reserved to "I/O Redirection" section.
|
|
|
|
53) Additional discussion in "I/O Redirection" section.
|
|
|
|
54) Added using "exec" to redirect stdin to "I/O Redirection" section.
|
|
|
|
55) Added "redir1.sh", example of I/O redirection using "exec".
|
|
|
|
56) Added "redir2.sh", example of I/O redirected "while" loop.
|
|
|
|
57) Added "redir3.sh", example of I/O redirected "until" loop.
|
|
|
|
58) Added "redir4.sh", example of I/O redirected "for" loop.
|
|
|
|
59) Added "redir5.sh", example of I/O redirected "if/then" test.
|
|
|
|
60) Added "wipedir.sh" example to $PWD listing in "Variables Revisited"
|
|
section.
|
|
|
|
61) More cross-references in "I/O Redirection" section.
|
|
|
|
62) Added "grp.sh", 'grep' emulation script, after 'grep' listing
|
|
in "External Filters, Programs and Commands" section.
|
|
|
|
63) Added "nice", "arch", "users" , "logname", "dmesg", "groups",
|
|
"hostname", and "pidof" to "System and Administrative Commands"
|
|
section.
|
|
|
|
64) Added "bzip2", "sq", "rev", "strings", "pathchk" and references to
|
|
"egrep", "fgrep" , "groff, gs, TeX", "column", "look", "ptx",
|
|
"chattr", "cal", "nslookup", "traceroute", "dig", "rx/sx", "rz/sz",
|
|
"uucp", and "sum, cksum, md5sum" to "External Filters, Programs and
|
|
Commands" section. Also added illustrative examples for "column"
|
|
and "look".
|
|
|
|
65) Added bibliography entries for GNU "gawk" reference manual and "groff"
|
|
tutorial. Also for I/O reference on UAlberta site.
|
|
|
|
66) Added cross-references to script examples to "zcat" and "mv"
|
|
commands" in "External Filters, Programs and Commands" section.
|
|
|
|
67) Clarification on [ -n $string ] string test operator. Added illustrative
|
|
example (str-test.sh).
|
|
|
|
68) Added "lp" and related commands to "External Filters, Programs and
|
|
Commands" section.
|
|
|
|
69) Added double-quoting variables to "Gotchas" section.
|
|
|
|
70) Added more xrefs to examples in "Variables Revisited" section.
|
|
|
|
71) Added "PS3" and "PS4" to "Variables Revisited" section.
|
|
|
|
72) Added enabling script options from #! header to "Options" section.
|
|
|
|
73) Added double backslash (\\) to "Quoting" section.
|
|
|
|
74) Added "Sed and Awk Micro-primer" appendix.
|
|
|
|
75) Fuller explanation of differences between "$*" and "$@" in "Variables
|
|
Revisited" section. Also added example to illustrate this,
|
|
"arglist.sh".
|
|
|
|
76) More cross-references to examples in "System and Administrative Commands"
|
|
section.
|
|
|
|
77) Added more detail to description of $PATH, in "Variables Revisited"
|
|
section.
|
|
|
|
78) Added more detail to "Files" section.
|
|
|
|
79) Added "command", "enable", , "builtin", "host", and "vrfy" to
|
|
"Internal Commands and Builtins" section.
|
|
|
|
80) Moved "umask" from "External Filters, Programs, and Commands" to "System
|
|
and Administrative Commands" section.
|
|
|
|
81) Rearranged the entries in "External Filters, Programs and Commands" in
|
|
somewhat more logical order and subdivided the section into logical
|
|
subsections.
|
|
|
|
82) Moved discussion of embedded Perl scripts from "System and Administrative
|
|
Commands" section to "Shell Wrappers" subsection.
|
|
|
|
83) Added example .bashrc file, thanks to Emmanuel Rouat.
|
|
|
|
84) Many minor changes not listed above.
|
|
|
|
|
|
|
|
|
|
====================================================================
|
|
|
|
Version 0.2, released 10/30/00.
|
|
|
|
Comments: This is a major improvement over 0.1.
|
|
|
|
Changes from version 0.1:
|
|
|
|
|
|
Bugfixes
|
|
|
|
1) fixed if [ cond1 && cond2 ] ==> if [ cond1 ] && [ cond2 ]
|
|
if [ cond1 || cond2 ] ==> if [ cond1 ] || [ cond2 ]
|
|
Added -a and -o options
|
|
if [ cond1 -a cond2 ]
|
|
if [ cond1 -o cond2 ]
|
|
|
|
Added 'and-or.sh' as new example to illustrate && and ||.
|
|
|
|
|
|
2) Corrected ex6.sh, added $'s in front of {USER?} and {MAIL?},
|
|
and added additional explanatory material.
|
|
|
|
3) Noted that "-" is not a bash option.
|
|
|
|
|
|
Other changes
|
|
|
|
4) ex55.sh: added note that 'killall' is Red Hat specific
|
|
|
|
5) Added to 'Gotchas':
|
|
interchanging -eq and =
|
|
starting variables with a digit
|
|
|
|
6) Substituted for Samuel Johnson quote at beginning:
|
|
"...there are dark corners in the Bourne shell, and people use all of them."
|
|
--Chet Ramey
|
|
|
|
7) Added reference to /usr/doc/initscripts-X.XX/sysconfig.txt just after
|
|
ex. 3-52.
|
|
|
|
8) Added reference to 'nl' in "External Filters" section and illustrative
|
|
example.
|
|
|
|
9) Added material to 'cat' listing.
|
|
|
|
10) Added:
|
|
cd source-directory
|
|
tar cf - . | (cd ../target-directory; tar xzf -)
|
|
to Alan Cox example as an alternative.
|
|
|
|
11) Added material & example to {}
|
|
|
|
12) Added "Renaming file extensions" example
|
|
to pattern matching section.
|
|
|
|
13) Added "Bash F.A.Q." and "sed F.A.Q." to references.
|
|
|
|
14) Added missing line in "Tests" section.
|
|
|
|
15) Revised the 'abstract'.
|
|
|
|
16) Added <revhistory> element.
|
|
|
|
17) Reorganized:
|
|
Moved two examples placed erroneously in 'backticks' section
|
|
to where they belong.
|
|
|
|
18) Fleshed out section on 'subshells'.
|
|
Added 2 examples.
|
|
|
|
19) Rewrote text to first 'variables' section.
|
|
|
|
20) Added "rpm-check.sh" example to "code blocks" discussion.
|
|
|
|
21) Added "online.sh" example to "trap" discussion.
|
|
|
|
22) Expanded "I/O Redirection" section
|
|
Definition of 'file descriptor' added.
|
|
More on file descriptors 3 - 9.
|
|
|
|
23) Expanded "Regular Expression" section.
|
|
|
|
24) Added explanation of signals to "debugging" section.
|
|
|
|
25) Added SECONDS and REPLY to internal variables listing (plus illustrative
|
|
examples).
|
|
|
|
26) Added 'ulimit' to administrative commands listing.
|
|
|
|
27) Added more information on 'trap' in 'Debugging' section.
|
|
|
|
28) Fixed erroneous '==' reference in 'Variables Revisited section.
|
|
|
|
29) Added 'jobs', 'ps', and 'nohup' to 'Administrative Commands' section.
|
|
|
|
30) Added additional entries to file tests in 'Tests' section.
|
|
|
|
31) Added additional entries and much more detail in 'Options' section.
|
|
|
|
32) More detail on 'grep'.
|
|
|
|
33) More detail on 'export'.
|
|
|
|
34) Added entries to file and string tests.
|
|
|
|
35) Added 'uptime' to 'System and Administrative Commands' section.
|
|
|
|
36) Added '~' to 'Special Characters' section.
|
|
|
|
37) Added material to 'Backquotes' section.
|
|
|
|
38) Added 'which' to 'External Filters and Commands' section.
|
|
|
|
39) More detail on parameters to functions.
|
|
|
|
40) More detail on arrays.
|
|
|
|
41) More detail on 'at'.
|
|
|
|
42) More detail on $RANDOM. Expanded example.
|
|
|
|
43) Added example script to demonstrate timed input.
|
|
|
|
44) Added 'Representation of Numerical Constants' subsection to 'Operations'
|
|
section.
|
|
|
|
45) Added "eval var1=\$$var2" indirect reference notation to 'Variables
|
|
Revisited' section.
|
|
|
|
46) Reorganized:
|
|
Moved 'Parameter Substition' discussion from 'Special Characters' section
|
|
to 'Variables' section.
|
|
Added extra illustrative code snippets.
|
|
|
|
47) Added bubble sort example to 'Arrays' section.
|
|
|
|
48) Added %= operator to 'Operations' section.
|
|
|
|
49) Added reference to 'whoami' to 'System and Administrative Commands'
|
|
section.
|
|
|
|
50) More detail and an additional example for 'Quoting' section.
|
|
|
|
51) Added info on using pattern match operator, ${var/patt/}, for deletion.
|
|
|
|
52) More detail on 'touch' and 'read' in 'External Filters'.
|
|
|
|
53) More detail on 'null' operator (:).
|
|
|
|
54) Some of the preexisting examples revised, with more material.
|
|
|
|
55) 'Miscellany' section added.
|
|
subsection 'Interactive Scripts'
|
|
subsection 'Optimizations'
|
|
subsection 'Assorted Tips'
|
|
|
|
56) Contrib script section added
|
|
4 scripts so far.
|
|
|
|
57) Expanded 'Credits' section.
|
|
|
|
|
|
58) Many other corrections, minor changes, and additions.
|
|
|
|
|
|
|
|
====================================================================
|
|
|
|
Version 0.1 released 14 June, 2000.
|