Welcome to EZDefinition.com
Technological Concepts, Abbreviations & Definitions
Main Menu
Main categories
  • Operating Systems
  • Computer Hardware
  • Internet
  • Programming Languages
  • Multimedia
  • Software
  • Security and Encryption
  • Communications and Networking
  • Organizations
  • Books
  • Databases
  • Games
  • E-commerce

    [an error occurred while processing this directive]

  • EZDefinition Sponsor
    Please visit our sponsor Parosoft.com
    Related Links to Advanced Bash-Scripting Guide
    [an error occurred while processing this directive]
    Advanced Bash-Scripting Guide
    [an error occurred while processing this directive]
    Computer Technologies  Operating Systems  UNIX  Shells Advanced Bash-Scripting Guide

    Advanced Bash-Scripting Guide

    Advanced Bash-Scripting Guide

    An in-depth exploration of the gentle art of shell scripting

    Mendel Cooper

    29 September 2002

    Revision History
    Revision 0.114 June 2000Revised by: mc
    Initial release.
    Revision 0.230 October 2000Revised by: mc
    Bugs fixed, plus much additional material and more example scripts.
    Revision 0.312 February 2001Revised by: mc
    Another major update.
    Revision 0.408 July 2001Revised by: mc
    More bugfixes, much more material, more scripts - a complete revision and expansion of the book.
    Revision 0.503 September 2001Revised by: mc
    Major update. Bugfixes, material added, chapters and sections reorganized.
    Revision 1.014 October 2001Revised by: mc
    Bugfixes, reorganization, material added. Stable release.
    Revision 1.106 January 2002Revised by: mc
    Bugfixes, material and scripts added.
    Revision 1.231 March 2002Revised by: mc
    Bugfixes, material and scripts added.
    Revision 1.302 June 2002Revised by: mc
    'TANGERINE' release: A few bugfixes, much more material and scripts added.
    Revision 1.416 June 2002Revised by: mc
    'MANGO' release: Quite a number of typos fixed, more material and scripts added.
    Revision 1.513 July 2002Revised by: mc
    'PAPAYA' release: A few bugfixes, much more material and scripts added.
    Revision 1.629 September 2002Revised by: mc
    'POMEGRANATE' release: some bugfixes, more material, one more script added.

    Dedication

    For Anita, the source of all the magic

    List of Examples
    2-1. cleanup: A script to clean up the log files in /var/log
    2-2. cleanup: An enhanced and generalized version of above script.
    3-1. Code blocks and I/O redirection
    3-2. Saving the results of a code block to a file
    3-3. Running a loop in the background
    3-4. Backup of all files changed in last day
    4-1. Variable assignment and substitution
    4-2. Plain Variable Assignment
    4-3. Variable Assignment, plain and fancy
    4-4. Integer or string?
    4-5. Positional Parameters
    4-6. wh, whois domain name lookup
    4-7. Using shift
    5-1. Echoing Weird Variables
    5-2. Escaped Characters
    6-1. exit / exit status
    6-2. Negating a condition using !
    7-1. What is truth?
    7-2. Equivalence of test, /usr/bin/test, [ ], and /usr/bin/[
    7-3. Arithmetic Tests using (( ))
    7-4. arithmetic and string comparisons
    7-5. testing whether a string is null
    7-6. zmost
    8-1. Greatest common divisor
    8-2. Using Arithmetic Operations
    8-3. Compound Condition Tests Using && and ||
    8-4. Representation of numerical constants
    9-1. $IFS and whitespace
    9-2. Timed Input
    9-3. Once more, timed input
    9-4. Timed read
    9-5. Am I root?
    9-6. arglist: Listing arguments with $* and $@
    9-7. Inconsistent $* and $@ behavior
    9-8. $* and $@ when $IFS is empty
    9-9. underscore variable
    9-10. Converting graphic file formats, with filename change
    9-11. Alternate ways of extracting substrings
    9-12. Using parameter substitution and error messages
    9-13. Parameter substitution and "usage" messages
    9-14. Length of a variable
    9-15. Pattern matching in parameter substitution
    9-16. Renaming file extensions:
    9-17. Using pattern matching to parse arbitrary strings
    9-18. Matching patterns at prefix or suffix of string
    9-19. Using declare to type variables
    9-20. Indirect References
    9-21. Passing an indirect reference to awk
    9-22. Generating random numbers
    9-23. Rolling the die with RANDOM
    9-24. Reseeding RANDOM
    9-25. Pseudorandom numbers, using awk
    9-26. C-type manipulation of variables
    10-1. Simple for loops
    10-2. for loop with two parameters in each [list] element
    10-3. Fileinfo: operating on a file list contained in a variable
    10-4. Operating on files with a for loop
    10-5. Missing in [list] in a for loop
    10-6. Generating the [list] in a for loop with command substitution
    10-7. A grep replacement for binary files
    10-8. Listing all users on the system
    10-9. Checking all the binaries in a directory for authorship
    10-10. Listing the symbolic links in a directory
    10-11. Symbolic links in a directory, saved to a file
    10-12. A C-like for loop
    10-13. Using efax in batch mode
    10-14. Simple while loop
    10-15. Another while loop
    10-16. while loop with multiple conditions
    10-17. C-like syntax in a while loop
    10-18. until loop
    10-19. Nested Loop
    10-20. Effects of break and continue in a loop
    10-21. Breaking out of multiple loop levels
    10-22. Continuing at a higher loop level
    10-23. Using case
    10-24. Creating menus using case
    10-25. Using command substitution to generate the case variable
    10-26. Simple string matching
    10-27. Checking for alphabetic input
    10-28. Creating menus using select
    10-29. Creating menus using select in a function
    11-1. printf in action
    11-2. Variable assignment, using read
    11-3. What happens when read has no variable
    11-4. Multi-line input to read
    11-5. Detecting the arrow keys
    11-6. Using read with file redirection
    11-7. Changing the current working directory
    11-8. Letting let do some arithmetic.
    11-9. Showing the effect of eval
    11-10. Forcing a log-off
    11-11. A version of "rot13"
    11-12. Using set with positional parameters
    11-13. Reassigning the positional parameters
    11-14. "unsetting" a variable
    11-15. Using export to pass a variable to an embedded awk script
    11-16. Using getopts to read the options/arguments passed to a script
    11-17. "Including" a data file
    11-18. A (useless) script that sources itself
    11-19. Effects of exec
    11-20. A script that exec's itself
    11-21. Waiting for a process to finish before proceeding
    11-22. A script that kills itself
    12-1. Using ls to create a table of contents for burning a CDR disk
    12-2. Badname, eliminate file names in current directory containing bad characters and whitespace.
    12-3. Deleting a file by its inode number
    12-4. Logfile using xargs to monitor system log
    12-5. copydir, copying files in current directory to another, using xargs
    12-6. Using expr
    12-7. Using date
    12-8. Word Frequency Analysis
    12-9. Which files are scripts?
    12-10. Generating 10-digit random numbers
    12-11. Using tail to monitor the system log
    12-12. Emulating "grep" in a script
    12-13. Checking words in a list for validity
    12-14. toupper: Transforms a file to all uppercase.
    12-15. lowercase: Changes all filenames in working directory to lowercase.
    12-16. du: DOS to UNIX text file conversion.
    12-17. rot13: rot13, ultra-weak encryption.
    12-18. Generating "Crypto-Quote" Puzzles
    12-19. Formatted file listing.
    12-20. Using column to format a directory listing
    12-21. nl: A self-numbering script.
    12-22. Using cpio to move a directory tree
    12-23. Unpacking an rpm archive
    12-24. stripping comments from C program files
    12-25. Exploring /usr/X11R6/bin
    12-26. An "improved" strings command
    12-27. Using cmp to compare two files within a script.
    12-28. basename and dirname
    12-29. Checking file integrity
    12-30. uudecoding encoded files
    12-31. A script that mails itself
    12-32. Monthly Payment on a Mortgage
    12-33. Base Conversion
    12-34. Another way to invoke bc
    12-35. Calculating PI
    12-36. Converting a decimal number to hexadecimal
    12-37. Factoring
    12-38. Calculating the hypotenuse of a triangle
    12-39. Using seq to generate loop arguments
    12-40. Using getopt to parse command-line options
    12-41. Capturing Keystrokes
    12-42. Securely deleting a file
    12-43. Filename generator
    12-44. Converting meters to miles
    12-45. Using m4
    13-1. setting an erase character
    13-2. secret password: Turning off terminal echoing
    13-3. Keypress detection
    13-4. pidof helps kill a process
    13-5. Checking a CD image
    13-6. Creating a filesystem in a file
    13-7. Adding a new hard drive
    13-8. killall, from /etc/rc.d/init.d
    14-1. Stupid script tricks
    14-2. Generating a variable from a loop
    16-1. Redirecting stdin using exec
    16-2. Redirecting stdout using exec
    16-3. Redirecting both stdin and stdout in the same script with exec
    16-4. Redirected while loop
    16-5. Alternate form of redirected while loop
    16-6. Redirected until loop
    16-7. Redirected for loop
    16-8. Redirected for loop (both stdin and stdout redirected)
    16-9. Redirected if/then test
    16-10. Data file "names.data" for above examples
    16-11. Logging events
    17-1. dummyfile: Creates a 2-line dummy file
    17-2. broadcast: Sends message to everyone logged in
    17-3. Multi-line message using cat
    17-4. Multi-line message, with tabs suppressed
    17-5. Here document with parameter substitution
    17-6. Parameter substitution turned off
    17-7. upload: Uploads a file pair to "Sunsite" incoming directory
    17-8. Here documents and functions
    17-9. "Anonymous" Here Document
    17-10. Commenting out a block of code
    17-11. A self-documenting script
    20-1. Variable scope in a subshell
    20-2. List User Profiles
    20-3. Running parallel processes in subshells
    21-1. Running a script in restricted mode
    23-1. Simple function
    23-2. Function Taking Parameters
    23-3. Maximum of two numbers
    23-4. Converting numbers to Roman numerals
    23-5. Testing large return values in a function
    23-6. Comparing two large integers
    23-7. Real name from username
    23-8. Local variable visibility
    23-9. Recursion, using a local variable
    24-1. Aliases within a script
    24-2. unalias: Setting and unsetting an alias
    25-1. Using an "and list" to test for command-line arguments
    25-2. Another command-line arg test using an "and list"
    25-3. Using "or lists" in combination with an "and list"
    26-1. Simple array usage
    26-2. Formatting a poem
    26-3. Some special properties of arrays
    26-4. Of empty arrays and empty elements
    26-5. An old friend: The Bubble Sort
    26-6. Complex array application: Sieve of Eratosthenes
    26-7. Emulating a push-down stack
    26-8. Complex array application: Exploring a weird mathematical series
    26-9. Simulating a two-dimensional array, then tilting it
    28-1. Finding the process associated with a PID
    28-2. On-line connect status
    29-1. Hiding the cookie jar
    29-2. Setting up a swapfile using /dev/zero
    29-3. Creating a ramdisk
    30-1. A buggy script
    30-2. Missing keyword
    30-3. test24, another buggy script
    30-4. Testing a condition with an "assert"
    30-5. Trapping at exit
    30-6. Cleaning up after Control-C
    30-7. Tracing a variable
    32-1. Subshell Pitfalls
    32-2. Piping the output of echo to a read
    34-1. shell wrapper
    34-2. A slightly more complex shell wrapper
    34-3. A shell wrapper around an awk script
    34-4. Perl embedded in a Bash script
    34-5. Bash and Perl scripts combined
    34-6. A (useless) script that recursively calls itself
    34-7. A (useful) script that recursively calls itself
    34-8. A "colorized" address database
    34-9. Echoing colored text
    34-10. Return value trickery
    34-11. Even more return value trickery
    34-12. Passing and returning arrays
    34-13. Fun with anagrams
    35-1. String expansion
    35-2. Indirect variable references - the new way
    35-3. Simple database application, using indirect variable referencing
    35-4. Using arrays and other miscellaneous trickery to deal four random hands from a deck of cards
    A-1. manview: Viewing formatted manpages
    A-2. mailformat: Formatting an e-mail message
    A-3. rn: A simple-minded file rename utility
    A-4. blank-rename: renames filenames containing blanks
    A-5. encryptedpw: Uploading to an ftp site, using a locally encrypted password
    A-6. copy-cd: Copying a data CD
    A-7. Collatz series
    A-8. days-between: Calculate number of days between two dates
    A-9. Make a "dictionary"
    A-10. Soundex conversion
    A-11. "Game of Life"
    A-12. Data file for "Game of Life"
    A-13. behead: Removing mail and news message headers
    A-14. ftpget: Downloading files via ftp
    A-15. password: Generating random 8-character passwords
    A-16. fifo: Making daily backups, using named pipes
    A-17. Generating prime numbers using the modulo operator
    A-18. tree: Displaying a directory tree
    A-19. string functions: C-like string functions
    A-20. Object-oriented database
    G-1. Sample .bashrc file
    H-1. VIEWDATA.BAT: DOS Batch File
    H-2. viewdata.sh: Shell Script Conversion of VIEWDATA.BAT

    [an error occurred while processing this directive]

    [an error occurred while processing this directive]
     

    All Rights Reserved

    Terms of usage   Please read our privacy stetment
    Copyright © 1999-2006 EZDefinition.com

     

    [an error occurred while processing this directive]