Advanced Bash-Scripting Guide 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. exit / exit status
- 3-2. Negating a condition using !
- 4-1. Code blocks and I/O redirection
- 4-2. Saving the results of a code block to a file
- 4-3. Running a loop in the background
- 4-4. Backup of all files changed in last day
- 5-1. Variable assignment and substitution
- 5-2. Plain Variable Assignment
- 5-3. Variable Assignment, plain and fancy
- 5-4. Integer or string?
- 5-5. Positional Parameters
- 5-6. wh, whois domain name lookup
- 5-7. Using shift
- 6-1. Echoing Weird Variables
- 6-2. Escaped Characters
- 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. Using read with
file redirection
- 11-6. Changing the current working directory
- 11-7. Letting let do some arithmetic.
- 11-8. Showing the effect of eval
- 11-9. Forcing a log-off
- 11-10. A version of "rot13"
- 11-11. Using set with positional
parameters
- 11-12. Reassigning the positional parameters
- 11-13. "unsetting" a variable
- 11-14. Using export to pass a variable to an
embedded awk script
- 11-15. Using getopts to read the
options/arguments passed to a script
- 11-16. "Including" a data file
- 11-17. A (useless) script that sources itself
- 11-18. Effects of exec
- 11-19. A script that exec's itself
- 11-20. Waiting for a process to finish before proceeding
- 11-21. 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
|