- •Advanced Bash-Scripting Guide
- •Dedication
- •Table of Contents
- •Part 1. Introduction
- •Advanced Bash-Scripting Guide
- •Chapter 2. Starting Off With a Sha-Bang
- •2.1. Invoking the script
- •2.2. Preliminary Exercises
- •Part 2. Basics
- •Chapter 3. Exit and Exit Status
- •Chapter 4. Special Characters
- •Chapter 5. Introduction to Variables and Parameters
- •5.1. Variable Substitution
- •5.2. Variable Assignment
- •5.3. Bash Variables Are Untyped
- •5.4. Special Variable Types
- •Chapter 6. Quoting
- •Chapter 7. Tests
- •7.1. Test Constructs
- •7.2. File test operators
- •7.3. Comparison operators (binary)
- •7.4. Nested if/then Condition Tests
- •7.5. Testing Your Knowledge of Tests
- •8.1. Operators
- •8.2. Numerical Constants
- •Part 3. Beyond the Basics
- •Chapter 9. Variables Revisited
- •9.1. Internal Variables
- •9.2. Manipulating Strings
- •9.3. Parameter Substitution
- •9.4. Typing variables: declare or typeset
- •9.5. Indirect References to Variables
- •9.6. $RANDOM: generate random integer
- •9.7. The Double Parentheses Construct
- •Chapter 10. Loops and Branches
- •10.1. Loops
- •10.2. Nested Loops
- •10.3. Loop Control
- •10.4. Testing and Branching
- •Chapter 11. Internal Commands and Builtins
- •12.1. Basic Commands
- •12.2. Complex Commands
- •12.3. Time / Date Commands
- •12.4. Text Processing Commands
- •12.5. File and Archiving Commands
- •12.6. Communications Commands
- •12.7. Terminal Control Commands
- •12.8. Math Commands
- •12.9. Miscellaneous Commands
- •Chapter 13. System and Administrative Commands
- •Chapter 14. Command Substitution
- •Chapter 15. Arithmetic Expansion
- •Chapter 16. I/O Redirection
- •16.1. Using exec
- •16.2. Redirecting Code Blocks
- •16.3. Applications
- •Chapter 17. Here Documents
- •Chapter 18. Recess Time
- •Part 4. Advanced Topics
- •Chapter 19. Regular Expressions
- •19.1. A Brief Introduction to Regular Expressions
- •19.2. Globbing
- •Chapter 20. Subshells
- •Chapter 21. Restricted Shells
- •Chapter 22. Process Substitution
- •Chapter 23. Functions
- •23.1. Complex Functions and Function Complexities
- •23.2. Local Variables
- •Chapter 24. Aliases
- •Chapter 25. List Constructs
- •Chapter 26. Arrays
- •Chapter 27. Files
- •Chapter 28. /dev and /proc
- •28.2. /proc
- •Chapter 29. Of Zeros and Nulls
- •Chapter 30. Debugging
- •Chapter 31. Options
- •Chapter 32. Gotchas
- •Chapter 33. Scripting With Style
- •Chapter 34. Miscellany
- •34.2. Shell Wrappers
- •34.3. Tests and Comparisons: Alternatives
- •34.4. Optimizations
- •34.5. Assorted Tips
- •34.6. Oddities
- •34.7. Security Issues
- •34.8. Portability Issues
- •34.9. Shell Scripting Under Windows
- •Chapter 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 Tables
- •List of Examples
- •Bibliography
Applications
|
Advanced Bash-Scripting Guide: |
|
Prev |
Chapter 16. I/O Redirection |
Next |
16.3. Applications
Clever use of I/O redirection permits parsing and stitching together snippets of command output (see Example 11- 5). This permits generating report and log files.
Example 16-11. Logging events
#!/bin/bash
#logevents.sh, by Stephane Chazelas.
#Event logging to a file.
#Must be run as root (for write access in /var/log).
ROOT_UID=0 |
# |
Only users with $UID |
0 have root privileges. |
E_NOTROOT=67 |
# |
Non-root exit error. |
|
if [ "$UID" -ne "$ROOT_UID" ] then
echo "Must be root to run this script." exit $E_NOTROOT
fi
FD_DEBUG1=3
FD_DEBUG2=4
FD_DEBUG3=5
#Uncomment one of the two lines below to activate script.
#LOG_EVENTS=1
#LOG_VARS=1
log() # Writes time and date to log file.
{
echo "$(date) $*" >&7 |
# This *appends* the date to the file. |
|
# See below. |
} |
|
case $LOG_LEVEL in |
|
|
|
1) |
exec 3>&2 |
4> /dev/null 5> /dev/null;; |
|
2) |
exec 3>&2 |
4>&2 |
5> /dev/null;; |
3) |
exec 3>&2 |
4>&2 |
5>&2;; |
http://tldp.org/LDP/abs/html/redirapps.html (1 of 2) [7/15/2002 6:35:15 PM]
Applications
*) exec 3> /dev/null 4> /dev/null 5> /dev/null;; esac
FD_LOGVARS=6 |
|
if [[ $LOG_VARS ]] |
|
then exec 6>> /var/log/vars.log |
|
else exec 6> /dev/null |
# Bury output. |
fi |
|
FD_LOGEVENTS=7
if [[ $LOG_EVENTS ]] then
#then exec 7 >(exec gawk '{print strftime(), $0}' >> /var/log/event.log)
#Above line will not work in Bash, version 2.04.
exec 7>> /var/log/event.log |
# Append to "event.log". |
|
log |
|
# Write time and date. |
else exec 7> /dev/null |
|
# Bury output. |
fi |
|
|
echo "DEBUG3: beginning" >&${FD_DEBUG3} |
|
|
ls -l >&5 2>&4 |
# command1 >&5 2>&4 |
|
echo "Done" |
|
# command2 |
echo "sending mail" >&${FD_LOGEVENTS} |
# Writes "sending mail" to fd #7. |
|
exit 0 |
|
|
Prev |
Home |
Next |
Redirecting Code Blocks |
Up |
Here Documents |
http://tldp.org/LDP/abs/html/redirapps.html (2 of 2) [7/15/2002 6:35:15 PM]