Bash Scripting
Automate tasks, build tools, and master DevOps with Bash — the default shell on most Linux systems and cloud platforms. From fundamentals to production-grade scripts, these guides cover everything you need.
Learning Path
Start with the fundamentals and progress through advanced topics:
- Fundamentals — Variables, quoting, control flow, functions, arrays
- Advanced — Process substitution, here documents, traps, debugging, sed/awk, cron
- Script Examples — 90+ real-world scripts: sysadmin, networking, math, automation
- Cheatsheet — 100+ commands and one-liners for quick reference
- Interview Questions — 35+ questions with detailed answers
Quick Start
Your First Bash Script
#!/usr/bin/env bash
echo "Hello, World!"
Save as hello.sh, make executable, and run:
chmod +x hello.sh
./hello.sh
Check Syntax
bash -n script.sh # Check for errors without running
Common Patterns
Variables and quoting:
name="Alice"
echo "Hello, $name" # Variable expansion
echo 'Literal $name' # No expansion
Conditional logic:
if [ $# -ne 1 ]; then
echo "Usage: $0 <name>"
exit 1
fi
Looping:
for file in *.txt; do
echo "Processing: $file"
done
Functions:
greet() {
echo "Hello, $1!"
}
greet "Alice"
Why Learn Bash?
- Ubiquitous: Default shell on Linux servers and macOS
- Essential for DevOps: Docker, Kubernetes, CI/CD automation
- System Administration: Server management, monitoring, backups
- Scripting: Task automation, cron jobs, system tools
- Interview Prep: Common in technical assessments
- Quick Wins: Automate repetitive tasks immediately
Key Topics
Fundamentals
- Variables and data types
- Quoting and expansion
- Control structures (if/for/while/case)
- Functions and scope
- Arrays and associative arrays
- String manipulation
- Arithmetic operations
- Exit codes and error handling
Advanced
- Process substitution (
<(),>()) - Here documents and here strings
- Signal handling with
trap - Debugging (
set -x,bash -n) - Parameter parsing with
getopts - Text processing with
sedandawk - Regular expressions
- Cron automation
- Parallel execution
Real-World Use Cases
- System monitoring scripts
- Backup automation
- Log analysis
- Configuration management
- Deployment pipelines
- User provisioning
- Health checks
Navigation
| Page | Focus |
|---|---|
| Fundamentals | Core concepts, syntax, control flow |
| Advanced | Process substitution, traps, text processing, automation |
| Cheatsheet | 100+ commands, snippets, one-liners |
| Interview Questions | 35+ Q&A with detailed explanations |
Best Practices
Error Handling
#!/usr/bin/env bash
set -euo pipefail # Exit on error, undefined vars, pipe failures
# Use meaningful error messages
if [[ ! -f "$1" ]]; then
echo "ERROR: File not found: $1" >&2
exit 1
fi
Safe Practices
# Always quote variables
echo "$var" # Good
# Use [[ ]] over [ ]
[[ $var == pattern ]] # Good
[ $var = pattern ] # Old style
# Use local in functions
function my_func() {
local var="local" # Won't affect global scope
}
Debugging
# Enable trace mode
set -x
# Or run with bash -x
bash -x script.sh
# Check syntax
bash -n script.sh
External Resources
- GNU Bash Manual
- ShellCheck — Bash script linter
- Bashfuscator — Obfuscation research
- POSIX Shell Standard
- Advanced Bash-Scripting Guide
Contributing
Have improvements, corrections, or additional examples? Contribute to CloudCaptain and help the community learn Bash!
Next Steps
Ready to dive in? Start with Fundamentals and work through the exercises, or jump to the Cheatsheet for quick reference when you need it.