A compendium of shell scripting recipes that can immediately be used, adjusted, and applied
The shell is the primary way of communicating with the Unix and Linux systems, providing a direct way to program by automating simple-to-intermediate tasks. With this book, Linux expert Steve Parker shares a collection of shell scripting recipes that can be used as is or easily modified for a variety of environments or situations. The book covers shell programming, with a focus on Linux and the Bash shell; it provides credible, real-world relevance, as well as providing the flexible tools to get started immediately.
* Shares a collection of helpful shell scripting recipes that can immediately be used for various of real-world challenges
* Features recipes for system tools, shell features, and systems administration
* Provides a host of plug and play recipes for to immediately apply and easily modify so the wheel doesn't have to be reinvented with each challenge faced
Come out of your shell and dive into this collection of tried and tested shell scripting recipes that you can start using right away!
Inhaltsverzeichnis
Introduction xxix
Part I: About the Ingredients
Chapter 1: The History of Unix, Gnu, and Linux 3
Unix 3
"Everything is a File" and Pipelines 5
BSD 6
GNU 7
Linux 11
Summary 12
Chapter 2: Getting Started 15
Choosing an OS 15
GNU/Linux 15
The BSDs 17
Proprietary Unix 17
Microsoft Windows 17
Choosing an Editor 18
Graphical Text Editors 18
Terminal Emulation 21
Nongraphical Text Editors 22
Setting Up the Environment 24
The Shell Profile 24
Aliases 26
vim Settings 30
Summary 31
Chapter 3: Variables 33
Using Variables 33
Typing 34
Assigning Values to Variables 35
Positional Parameters 39
Return Codes 42
Unsetting Variables 45
Preset and Standard Variables 47
BASH_ENV 47
BASHOPTS 47
SHELLOPTS 48
BASH_COMMAND 50
BASH_SOURCE, FUNCNAME, LINENO, and BASH_LINENO 51
SHELL 55
HOSTNAME and HOSTTYPE 55
Working Directory 55
PIPESTATUS 55
TIMEFORMAT 56
PPID 57
RANDOM 58
REPLY 58
SECONDS 58
BASH_XTRACEFD 59
GLOBIGNORE 60
HOME 62
IFS 62
PATH 63
TMOUT 64
TMPDIR 65
User Identification Variables 65
Summary 66
Chapter 4: Wildcard Expansion 67
Filename Expansion (Globbing) 67
Bash Globbing Features 70
Shell Options 71
Regular Expressions and Quoting 75
Overview of Regular Expressions 76
Quoting 77
Summary 81
Chapter 5: Conditional Execution 83
If/Then 83
Else 85
elif 85
Test ([) 87
Flags for Test 88
File Comparison Tests 95
String Comparison Tests 96
Regular Expression Tests 98
Numerical Tests 101
Combining Tests 103
Case 105
Summary 109
Chapter 6: Flow Control Using Loops 111
For Loops 111
When to Use for Loops 112
Imaginative Ways of Feeding "for" with Data 112
C-Style for Loops 118
while Loops 119
When to Use while Loops 119
Ways to Use while Loops 119
Nested Loops 125
Breaking and Continuing Loop Execution 126
while with Case 130
until Loops 131
select Loops 133
Summary 137
Chapter 7: Variables Continued 139
Using Variables 139
Variable Types 141
Length of Variables 142
Special String Operators 144
Stripping Variable Strings by Length 144
Stripping from the End of the String 146
Stripping Strings with Patterns 147
Searching Strings 151
Using Search and Replace 151
Replacing Patterns 153
Deleting Patterns 153
Changing Case 153
Providing Default Values 153
Indirection 157
Sourcing Variables 158
Summary 159
Chapter 8: Functions and Libraries 161
Functions 161
Defining Functions 162
Function Output 162
Writing to a File 164
Redirecting the Output of an Entire Function 167
Functions with Trap 171
Recursive Functions 173
Variable Scope 177
Libraries 181
Creating and Accessing Libraries 183
Library Structures 183
Network Configuration Library 187
Use of Libraries 191
getopts 191
Handling Errors 194
getopts within Functions 195
Summary 197
Chapter 9: Arrays 199
Assigning Arrays 199
One at a Time 200
All at Once 200
By Index 201
All at Once from a Source 201
Read from Input 203
Accessing Arrays 205
Accessing by Index 205
Length of Arrays 206
Accessing by Variable Index 206
Selecting Items from an Array 209
Displaying the Entire Array 209
Associative Arrays 210
Manipulating Arrays 211
Copying an Array 211
Appending to an Array 213
Deleting from an Array 214
Advanced Techniques 216
Summary 217
Chapter 10: Processes 219
The ps Command 219
ps Line Length 220
Parsing the Process Table Accurately 220
killall 223
The /proc pseudo-filesystem 225
prtstat 226
I/O Redirection 227
Appending Output to an Existing File 229
Permissions on Redirections 229
exec 229
Using exec to Replace the Existing Program 230
Using exec to Change Redirection 231
Pipelines 237
Background Processing 237
wait 238
Catching Hangups with nohup 239
Other Features of /proc and /sys 242
Version 242
SysRq 242
/proc/meminfo 245
/proc/cpuinfo 245
/sys 246
/sys/devices/system/node 251
sysctl 253
Summary 254
Chapter 11: Choosing and Using Shells 255
The Bourne Shell 256
The KornShell 256
The C Shell 256
The Tenex C Shell 257
The Z Shell 257
The Bourne Again Shell 257
The Debian Almquist Shell 258
Dotfiles 258
Interactive Login Shells 259
Interactive Non-Login Shells 260
Non-Interactive Shells 261
Logout Scripts 262
Command Prompts 262
The PS1 Prompt 262
The PS2, PS3, and PS4 Prompts 264
Aliases 265
Timesavers 265
Modifying Behaviors 265
History 266
Recalling Commands 267
Searching History 267
Timestamps 268
Tab Completion 269
ksh 269
tcsh 270
zsh 270
bash 271
Foreground, Background, and Job Control 272
Backgrounding Processes 272
Job Control 273
nohup and disown 275
Summary 276
Part II: Recipes For Using and Extending System Tools
Chapter 12: File Manipulation 279
stat 279
cat 281
Numbering Lines 282
Dealing with Blank Lines 282
Non-Printing Characters 283
cat Backwards is tac 284
Redirection 285
>) 285
>>) 286
Input Redirection: The Single Less-Than Arrow (<) 288