Exforsys.com
 
Home Tech Articles UNIX
 

Advanced Bash-Scripting Guide with Sample Code

 

An in-depth exploration of the gentle art of shell scripting. The shell is a command interpreter. More than just the insulating layer between the operating system kernel and the user, it's also a fairly powerful programming language. A shell program, called a script, is an easy-to-use tool for building applications by "gluing" together system calls, tools, utilities, and compiled binaries.

Virtually the entire repertoire of UNIX commands, utilities, and tools is available for invocation by a shell script. If that were not enough, internal shell commands, such as testing and loop constructs, give additional power and flexibility to scripts. Shell scripts lend themselves exceptionally well to administrative system tasks and other routine repetitive jobs not requiring the bells and whistles of a full-blown tightly structured programming language.

Please click on the chapter title to read the tutorial.

Table of Contents

Part 1. Introduction

1. Why Shell Programming?

2. Starting Off With a Sha-Bang

Part 2. Basics

3. Exit and Exit Status

4. Special Characters

5. Introduction to Variables and Parameters

6. Quoting

7. Tests

8. Operations and Related Topics

Part 3. Beyond the Basics

9. Variables Revisited

10. Loops and Branches

11. Internal Commands and Builtins

12. External Filters, Programs and Commands

13. System and Administrative Commands

14. Command Substitution

15. Arithmetic Expansion

16. I/O Redirection

17. Here Documents

18. Recess Time

Part 4. Advanced Topics

19. Regular Expressions

20. Subshells

21. Restricted Shells

22. Process Substitution

23. Functions

24. Aliases

25. List Constructs

26. Arrays

27. Files

28. /dev and /proc

29. Of Zeros and Nulls

30. Debugging

31. Options

32. Gotchas

33. Scripting With Style

34. Miscellany

35. Bash, version 2

36. Endnotes

36.1. Author's Note

36.2. About the Author

36.3. Tools Used to Produce This Book

36.4. Credits

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





 

 

Comments



Post Your Comment:

Members Please Login
Your Name:*
e-mail ID:(required for notification)*
Image Verification: 
 
 Subscribe    

Sponsored Links

 

Subscribe via RSS


Get Daily Updates via Subscribe to Exforsys Free Training via email


Get Latest Free Training Updates delivered directly to your Inbox...

Enter your email address:


 

Subscribe to Exforsys Free Training via RSS
 

 

Copyright © 2000 - 2009 exforsys.com. All Rights Reserved

Page copy protected against web site content infringement by Copyscape