- •Table of Contents
- •Chapter 1. Why Shell Programming?
- •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
- •Chapter 8. Operations and Related Topics
- •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.2.1. Manipulating strings using awk
- •9.2.2. Further Discussion
- •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
- •11.1. Job Control Commands
- •Chapter 12. External Filters, Programs and Commands
- •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
- •23.2.1. Local variables make recursion possible.
- •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
- •33.1. Unofficial Shell Scripting Stylesheet
- •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. Portability Issues
- •34.8. Shell Scripting Under Windows
- •Chapter 35. Bash, version 2
- •Chapter 36. Endnotes
- •36.1. Author's Note
- •36.2. About the Author
- •36.3. Tools Used to Produce This Book
- •36.3.1. Hardware
- •36.3.2. Software and Printware
- •36.4. Credits
- •Bibliography
- •Appendix A. Contributed Scripts
- •Appendix C. Exit Codes With Special Meanings
- •Appendix D. A Detailed Introduction to I/O and I/O Redirection
- •Appendix E. Localization
- •Appendix F. History Commands
- •Appendix G. A Sample .bashrc File
- •Appendix H. Converting DOS Batch Files to Shell Scripts
- •Appendix I. Exercises
- •Appendix J. Copyright
Advanced Bash−Scripting Guide
8.2. Numerical Constants
A shell script interprets a number as decimal (base 10), unless that number has a special prefix or notation. A number preceded by a 0 is octal (base 8). A number preceded by 0x is hexadecimal (base 16). A number with an embedded # is evaluated as BASE#NUMBER (this option is of limited usefulness because of range restrictions).
Example 8−3. Representation of numerical constants:
#!/bin/bash
#numbers.sh: Representation of numbers.
#Decimal
let "d = 32" echo "d = $d"
#Nothing out of the ordinary here.
#Octal: numbers preceded by '0' (zero) let "o = 071"
echo "o = $o"
#Expresses result in decimal.
#Hexadecimal: numbers preceded by '0x' or '0X' let "h = 0x7a"
echo "h = $h"
#Expresses result in decimal.
#Other bases: BASE#NUMBER
#BASE between 2 and 36.
let "b = 32#77" echo "b = $b"
#
# This notation only works for a limited range (2 − 36)
# ... 10 digits + 26 alpha characters = 36. let "c = 2#47" # Out of range error:
# numbers.sh: let: c = 2#47: value too great for base (error token is "2#47") echo "c = $c"
echo
echo $((36#zz)) $((2#10101010)) $((16#AF16))
exit 0
# Thanks, S.C., for clarification.
Part 3. Beyond the Basics
Table of Contents
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
8.2. Numerical Constants |
58 |
Advanced Bash−Scripting Guide
9.6.$RANDOM: generate random integer
9.7.The Double Parentheses Construct
10.Loops and Branches
10.1.Loops
10.2.Nested Loops
10.3.Loop Control
10.4.Testing and Branching
11.Internal Commands and Builtins
11.1.Job Control Commands
12.External Filters, Programs and Commands
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
13.System and Administrative Commands
14.Command Substitution
15.Arithmetic Expansion
16.I/O Redirection
16.1.Using exec
16.2.Redirecting Code Blocks
16.3.Applications
17.Here Documents
18.Recess Time
8.2. Numerical Constants |
59 |