Chris F.A. Johnson
CHAPTER 1:
|
Shell Commands | 1 | |
Parameters and Variables | 7 | |
Positional Parameters | 7 | |
Special Parameters | 7 | |
standard-vars — A Collection of Useful Variables | 9 | |
Patterns | 9 | |
Filename expansion | 10 | |
Regular Expressions | 10 | |
Parameter Expansion | 12 | |
The Bourne Shell Expansions | 12 | |
POSIX Parameter Expansions | 14 | |
Shell-Specific Expansions, bash2, and ksh93 | 15 | |
Shell Arithmetic | 16 | |
Aliases | 16 | |
Sourcing a File | 17 | |
Functions | 17 | |
Functions Are Fast | 17 | |
Command Substitution Is Slow | 17 | |
Using the Functions in This Book | 18 | |
standard-funcs: A Collection of Useful Commands | 19 | |
1.1 get_key — Get a Single Keystroke from the User | 19 | |
1.2 getline — Prompt User to Enter a Line | 20 | |
1.3 press_any_key — Prompt for a Single Keypress | 21 | |
1.4 menu1 — Print a Menu and Execute a Selected Command | 22 | |
1.5 arg — Prompt for Required Argument If None Supplied | 23 | |
1.6 die — Print Error Message and Exit with Error Status | 24 | |
1.7 show_date — Display Date in D[D] MMM YYYY Format | 25 | |
1.8 date_vars — Set Date and Time Variables | 26 | |
1.9 is_num — Is This a Positive Integer? | 28 | |
1.10 abbrev_num — Abbreviate Large Numbers | 29 | |
1.11 commas — Add Thousands Separators to a Number | 30 | |
1.12 pr1 — Print Arguments, One to a Line | 32 | |
1.13 checkdirs — Check for Directories; Create If Necessary | 33 | |
1.14 checkfiles — Check That a Directory Contains Certain Files | 33 | |
1.15 zpad — Pad a Number with Leading Zeroes | 34 | |
1.16 cleanup — Remove Temporary Files and Reset Terminal on Exit | 35 | |
The Unix Utilities | 36 | |
Summary | 40 |
End of the Line for OS Differences: Converting Text Files | 42 | |
2.1 dos2unix — Convert Windows Text Files to Unix | 42 | |
2.2 unix2dos — Convert a Unix File to Windows | 43 | |
2.3 mac2unix — Convert Macintosh Files to Unix | 44 | |
2.4 unix2mac — Convert Unix Files to Mac Format | 44 | |
2.5 dos2mac — Convert Windows Files to Macintosh | 45 | |
2.6 mac2dos — Convert Macintosh Files to Windows | 45 | |
Displaying Files | 46 | |
2.7 prn — Print File with Line Numbers | 46 | |
2.8 prw — Print One Word per Line | 49 | |
2.9 wbl — Sort Words by Length | 51 | |
Formatting File Facts | 52 | |
2.10 finfo — File Information Display | 52 | |
2.11 wfreq — Word Frequency | 56 | |
2.12 lfreq — Letter Frequency | 56 | |
2.13 fed — A Simple Batch File Editor | 58 | |
Summary | 60 |
Character Actions: The char-funcs Library | 61 | |
3.1 chr — Convert a Decimal Number to an ASCII Character | 62 | |
3.2 asc — Convert a Character to Its Decimal Equivalent | 63 | |
3.3 nxt — Get the Next Character in ASCII Sequence | 64 | |
3.4 upr — Convert Character(s) to Uppercase | 65 | |
3.5 lwr — Convert Character(s) to Lowercase | 67 | |
String Cleaning: The string-funcs Library | 69 | |
3.6 sub — Replace First Occurrence of a Pattern | 69 | |
3.7 gsub — Globally Replace a Pattern in a String | 70 | |
3.8 repeat — Build a String of a Specified Length | 72 | |
3.9 index, rindex — Find Position of One String Within Another | 74 | |
3.10 substr — Extract a Portion of a String | 76 | |
3.11 insert_str — Place One String Inside Another | 78 | |
Summary | 79 |
Finding and Massaging Word Lists | 82 | |
wf-funcs: WordFinder Function Library | 82 | |
4.1 write_config — Write User's Information to the Configuration File | 82 | |
4.2 do_config — Check For and Source Default Configuration File | 83 | |
4.3 set_sysdict — Select the Dictionary Directory | 84 | |
4.4 mkwsig — Sort Letters in a Word | 85 | |
4.5 wf-clean — Remove Carriage Returns and Accents | 86 | |
4.6 wf-compounds — Squish Compound Words and Save with Lengths | 87 | |
4.7 wf-setup — Prepare Word and Anagram Lists | 89 | |
Playing with Matches | 91 | |
4.8 wf — Find Words That Match a Pattern | 91 | |
4.9 wfb — Find Words That Begin with a Given Pattern | 93 | |
4.10 wfe — Find Words That End with a Given Pattern | 94 | |
4.11 wfc — Find Words That Contain a Given Pattern | 95 | |
4.12 wfit — Find Words That Fit Together in a Grid | 97 | |
4.13 anagram — Find Words That Are Anagrams of a Given Word | 100 | |
4.14 aplus — Find Anagrams of a Word with a Letter Added | 101 | |
4.15 aminus — Remove Each Letter in Turn and Anagram What's Left | 103 | |
Summary | 104 |
The math-funcs Library | 105 | |
5.1 fpmul — Multiply Decimal Fractions | 106 | |
5.2 int — Return the Integer Portion of a Decimal Fraction | 110 | |
5.3 round — Round the Argument to the Nearest Integer | 110 | |
5.4 pow — Raise a Number to Any Given Power | 111 | |
5.5 square — Raise a Number to the Second Power | 113 | |
5.6 cube — Raise a Number to the Third Power | 113 | |
5.7 calc — A Simple Command-Line Calculator | 114 | |
Adding and Averaging | 115 | |
5.8 total — Add a List of Numbers | 115 | |
5.9 mean — Find the Arithmetic Mean of a List of Numbers | 116 | |
5.10 median — Find the Median of a List of Numbers | 118 | |
5.11 mode — Find the Number That Appears Most in a List | 119 | |
5.12 range — Find the Range of a Set of Numbers | 120 | |
5.13 stdev — Finding the Standard Deviation | 122 | |
Converting Between Unit Systems | 123 | |
5.14 conversion-funcs — Converting Metric Units | 124 | |
5.15 conversion — A Menu System for Metric Conversion | 131 | |
Summary | 135 |
What's in a Name? | 137 | |
POSIX Portable Filenames | 138 | |
OK Filenames | 138 | |
Functioning Filenames: The filename-funcs Library | 139 | |
6.1 basename — Extract the Last Element of a Pathname | 139 | |
6.2 dirname — Return All but the Last Element of a Pathname | 141 | |
6.3 is_pfname — Check for POSIX Portable Filename | 142 | |
6.4 is_OKfname — Check Whether a Filename Is Acceptable | 143 | |
6.5 pfname — Convert Nonportable Characters in Filename | 144 | |
6.6 OKfname — Make a Filename Acceptable | 145 | |
6.7 is_whitespc — Does the Filename Contain Whitespace Characters? | 146 | |
6.8 whitespc — Fix Filenames Containing Whitespace Characters | 146 | |
6.9 is_dir — Is This a Directory I See Before Me? | 147 | |
6.10 nodoublechar — Remove Duplicate Characters from a String | 148 | |
6.11 new_filename — Change Filename to Desired Character Set | 149 | |
6.12 fix_pwd — Fix All the Filenames in the Current Directory | 150 | |
6.13 fixfname — Convert Filenames to Sensible Names | 152 | |
Summary | 154 |
The path-funcs Library | 157 | |
7.1 path — Display a User's PATH | 157 | |
7.2 unslash — Remove Extraneous Slashes | 158 | |
7.3 checkpath — Clean Up the PATH Variable | 159 | |
7.4 addpath — Add Directories to the PATH Variable | 161 | |
7.5 rmpath — Remove One or More Directories from $PATH | 163 | |
Summary | 164 |
The date-funcs Library | 166 | |
8.1 split_date — Divide a Date into Day, Month, and Year | 166 | |
8.2 is_leap_year — Is There an Extra Day This Year? | 167 | |
8.3 days_in_month — How Many Days Hath September? | 169 | |
8.4 date2julian — Calculate the Julian Day Number | 170 | |
8.5 julian2date — Convert Julian Back to Year, Month, and Day | 170 | |
8.6 dateshift — Add or Subtract a Number of Days | 172 | |
8.7 diffdate — Find the Number of Days Between Two Dates | 174 | |
8.8 day_of_week — Find the Day of the Week for Any Date | 175 | |
8.9 display_date — Show a Date in Text Format | 176 | |
8.10 parse_date — Decipher Various Forms of Date String | 179 | |
8.11 valid_date — Where Was I on November 31st? | 183 | |
Summary | 184 |
9.1 dfcmp — Notify User of Major Changes in Disk Usage | 185 | |
9.2 symfix — Remove Broken Symbolic Links | 189 | |
9.3 sym2file — Converts Symbolic Links to Regular Files | 191 | |
9.4 zrm — Remove Empty Files | 193 | |
9.5 undup — Remove Duplicate Files | 194 | |
9.6 lsr — List the Most Recent (or Oldest) Files in a Directory | 196 | |
Summary | 198 |
10.1 popcheck — Display Number of Messages in POP3 Mailbox | 199 | |
10.2 pop3-funcs — Functions for Managing a POP3 Mailbox | 200 | |
10.3 pop3list — Examine a POP3 Mailbox | 215 | |
10.4 pop3filter — Delete and Retrieve Messages from a POP3 Server | 222 | |
10.5 pflog — Print a Summary of a Day's Activity | 224 | |
10.6 viewlog — Continuously View the pop3filter Log File | 225 | |
Summary | 227 |
11.1 ps-labels — Produce Mailing Labels from a List | 231 | |
11.2 ps-envelopes — Print Envelopes from List | 237 | |
11.3 ps-grid — Convert a Crossword Grid to PostScript | 242 | |
Summary | 249 |
12.1 screen-vars — Variables for Screen Manipulation | 252 | |
12.2 set_attr — Set Screen-Printing Attributes | 254 | |
12.3 set_fg, set_bg, set_fgbg — Set Colors for Printing to the Screen | 255 | |
12.4 cls — Clear the Screen | 256 | |
12.5 printat — Position Cursor by Row and Column | 257 | |
12.6 put_block_at — Print Lines in a Column Anywhere on the Screen | 260 | |
12.7 get_size — Set LINES and COLUMNS Variables | 262 | |
12.8 max_length — Find the Length of the Longest Argument | 263 | |
12.9 print_block_at — Print a Block of Lines Anywhere on the Screen | 264 | |
12.10 vbar, hbar — Print a Vertical or Horizontal Bar | 265 | |
12.11 center — Center a String on N Columns | 267 | |
12.12 flush_right — Align String with the Right Margin | 268 | |
12.13 ruler — Draw a Ruler Across the Width and Height of the Window | 269 | |
12.14 box_block, box_block_at — Print Text Surrounded by a Box | 271 | |
12.15 clear_area, clear_area_at — Clear an Area of the Screen | 272 | |
12.16 box_area, box_area_at — Draw a Box Around an Area | 273 | |
12.17 screen-demo — Saving and Redisplaying Areas of the Screen | 275 | |
Summary | 277 |
13.1 bu — Backup Directories | 280 | |
13.2 bin-pack — Fill Fixed-Capacity Directories with Files | 285 | |
13.3 unpack — Extract All Files from One or More Archives | 290 | |
Summary | 292 |
14.1 date-file — Add a Datestamp to a Filename | 293 | |
14.2 rmold — Remove Old Files | 297 | |
14.3 keepnewest — Remove All but the Newest or Oldest Files | 300 | |
Summary | 302 |
15.1 lookup — Find the Corresponding Value for a Key | 304 | |
shdb-funcs: Shell Database Function Library | 306 | |
15.2 load_db — Import Database into Shell Array | 306 | |
15.3 split_record — Split a Record into Fields | 307 | |
15.4 csv_split — Extract Fields from CSV Records | 309 | |
15.5 put_record — Assemble a Database Record from an Array | 310 | |
15.6 put_csv — Assemble Fields into a CSV Record | 311 | |
15.7 db-demo — View and Edit a Password File | 312 | |
PhoneBase: A Simple Phone Number Database | 317 | |
15.8 ph — Look Up a Phone Number | 318 | |
15.9 phadd — Add an Entry to PhoneBase | 319 | |
15.10 phdel — Delete an Entry from PhoneBase | 320 | |
15.11 phx — Show ph Search Results in an X Window | 320 | |
Summary | 321 |
Playing with Hypertext: The html-funcs Library | 323 | |
16.1 get_element — Extract the First Occurrence of an Element | 323 | |
16.2 split_tags — Put Each Tag on Its Own Line | 326 | |
16.3 html-title — Get the Title from an HTML File | 327 | |
HTML on the Fly: The cgi-funcs Library | 329 | |
16.4 x2d2 — Convert a Two-Digit Hexadecimal Number to Decimal | 329 | |
16.5 dehex — Convert Hex Strings (%XX) to Characters | 330 | |
16.6 filedate — Find and Format the Modification Date of a File | 332 | |
Creating HTML Files | 333 | |
16.7 mk-htmlindex — Create an HTML Index | 333 | |
16.8 pretext — Create a Wrapper Around a Text File | 341 | |
16.9 text2html — Convert a Text File to HTML | 342 | |
16.10 demo.cgi — A CGI Script | 343 | |
Summary | 344 |
17.1 prcalc — A Printing Calculator | 345 | |
17.2 gle — Keeping Records Without a Shoebox | 350 | |
Summary | 360 |
The rand-funcs Library | 361 | |
18.1 random — Return One or More Random Integers in a Given Range | 362 | |
18.2 toss — Simulate Tossing a Coin | 365 | |
18.3 randstr — Select a String at Random | 366 | |
A Random Sampling of Scripts | 367 | |
18.4 rand-date — Generate Random Dates in ISO Format | 367 | |
18.5 randsort — Print Lines in Random Order | 369 | |
18.6 randomword — Generate Random Words According to Format Specifications | 370 | |
18.7 dice — Roll a Set of Dice | 375 | |
18.8 throw — Throw a Pair of Dice | 378 | |
Summary | 379 |
19.1 topntail — Remove Top and Bottom Lines from a File | 381 | |
19.2 flocate — Locate Files by Filename Alone | 383 | |
19.3 sus — Display a POSIX Man Page | 384 | |
19.4 cwbw — Count Words Beginning With | 385 | |
19.5 cci — Configure, Compile, and Install from Tarball | 386 | |
19.6 ipaddr — Find a Computer's Network Address | 387 | |
19.7 ipaddr.cgi — Print the Remote Address of an HTTP Connection | 388 | |
19.8 iprev — Reverse the Order of Digits in an IP Address | 389 | |
19.9 intersperse — Insert a String Between Doubled Characters | 389 | |
19.10 ll — Use a Pager for a Directory Listing Only If Necessary | 390 | |
19.11 name-split — Divide a Person's Full Name into First, Last, and Middle Names | 391 | |
19.12 rot13 — Encode or Decode Text | 392 | |
19.13 showfstab — Show Information from /etc/fstab | 393 | |
19.14 unique — Remove All Duplicate Lines from a File | 395 | |
Summary | 395 |
20.1 script-setup — Prepare the Scripting Environment | 397 | |
20.2 cpsh — Install Script and Make Backup Copy | 402 | |
20.3 shgrep — Search Scripts for String or Regular Expression | 403 | |
20.4 shcat — Display a Shell Script | 404 | |
Summary | 405 |
Introductions to Shell Scripting | 407 |
Intermediate and Advanced Scripting | 408 |
Collections of Scripts | 408 |
Home Pages for Shells | 408 |
Regular Expressions, sed, and awk | 408 |
Miscellaneous Pages | 409 |
History of the Shell | 409 |