18 KiB
Bash Scripting Resources
Comprehensive directory of authoritative sources, tools, and learning resources for bash scripting.
Table of Contents
- Official Documentation
- Style Guides and Standards
- Tools and Utilities
- Learning Resources
- Community Resources
- Books
- Cheat Sheets and Quick References
- Testing and Quality
- Platform-Specific Resources
- Advanced Topics
🚨 CRITICAL GUIDELINES
Windows File Path Requirements
MANDATORY: Always Use Backslashes on Windows for File Paths
When using Edit or Write tools on Windows, you MUST use backslashes (\) in file paths, NOT forward slashes (/).
Examples:
- ❌ WRONG:
D:/repos/project/file.tsx - ✅ CORRECT:
D:\repos\project\file.tsx
This applies to:
- Edit tool file_path parameter
- Write tool file_path parameter
- All file operations on Windows systems
Documentation Guidelines
NEVER create new documentation files unless explicitly requested by the user.
- Priority: Update existing README.md files rather than creating new documentation
- Repository cleanliness: Keep repository root clean - only README.md unless user requests otherwise
- Style: Documentation should be concise, direct, and professional - avoid AI-generated tone
- User preference: Only create additional .md files when user specifically asks for documentation
Official Documentation
Bash Manual
GNU Bash Reference Manual
- URL: https://www.gnu.org/software/bash/manual/
- Description: The authoritative reference for bash features, syntax, and built-ins
- Use for: Detailed feature documentation, syntax clarification, version-specific features
Bash Man Page
man bash # Complete bash documentation
man bash-builtins # Built-in commands
- Use for: Quick reference on local system, offline documentation
POSIX Standards
POSIX Shell Command Language
- URL: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
- Description: IEEE/Open Group specification for portable shell scripting
- Use for: Writing portable scripts, understanding sh vs bash differences
POSIX Utilities
- URL: https://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
- Description: Standard utilities available in POSIX-compliant systems
- Use for: Portable command usage, cross-platform compatibility
Command Documentation
GNU Coreutils Manual
- URL: https://www.gnu.org/software/coreutils/manual/
- Description: Documentation for core GNU utilities (ls, cat, grep, etc.)
- Use for: Understanding Linux command behavior, GNU-specific features
Man Pages Online
- URL: https://man7.org/linux/man-pages/
- URL: https://www.freebsd.org/cgi/man.cgi (BSD/macOS)
- Description: Online searchable man pages
- Use for: Quick online reference, comparing Linux vs BSD commands
Style Guides and Standards
Google Shell Style Guide
URL: https://google.github.io/styleguide/shellguide.html
Key Points:
- Industry-standard practices from Google
- Covers naming conventions, formatting, best practices
- When to use shell vs other languages
- Safety and portability guidelines
Use for: Professional code style, team standards, code reviews
Defensive Bash Programming
URL: https://kfirlavi.herokuapp.com/blog/2012/11/14/defensive-bash-programming
Key Points:
- Writing robust bash scripts
- Error handling patterns
- Safe coding practices
- Code organization
Use for: Improving script reliability, avoiding common pitfalls
Shell Style Guide (GitHub)
URL: https://github.com/bahamas10/bash-style-guide
Key Points:
- Community-driven style guidelines
- Practical examples
- Modern bash features
Use for: Alternative perspectives on style, community standards
Tools and Utilities
ShellCheck
Website: https://www.shellcheck.net/ GitHub: https://github.com/koalaman/shellcheck Online Tool: https://www.shellcheck.net/ (paste code for instant feedback)
Description: Static analysis tool for shell scripts
Installation:
# Ubuntu/Debian
apt-get install shellcheck
# macOS
brew install shellcheck
# Windows (Scoop)
scoop install shellcheck
# Via Docker
docker run --rm -v "$PWD:/mnt" koalaman/shellcheck script.sh
Usage:
shellcheck script.sh # Check script
shellcheck -x script.sh # Follow source statements
shellcheck -f json script.sh # JSON output
shellcheck -e SC2086 script.sh # Exclude specific warnings
ShellCheck Wiki: https://www.shellcheck.net/wiki/
- Detailed explanations of every warning
- Use for: Understanding and fixing ShellCheck warnings
shfmt
GitHub: https://github.com/mvdan/sh
Description: Shell script formatter
Installation:
# macOS
brew install shfmt
# Go
go install mvdan.cc/sh/v3/cmd/shfmt@latest
Usage:
shfmt -i 4 -w script.sh # Format with 4-space indent
shfmt -d script.sh # Show diff without modifying
shfmt -l script.sh # List files that would be changed
Use for: Consistent code formatting, automated formatting in CI
BATS (Bash Automated Testing System)
GitHub: https://github.com/bats-core/bats-core
Description: Testing framework for bash scripts
Installation:
git clone https://github.com/bats-core/bats-core.git
cd bats-core
./install.sh /usr/local
Usage:
bats test/ # Run all tests
bats test/script.bats # Run specific test file
bats --tap test/ # TAP output format
Documentation: https://bats-core.readthedocs.io/
Use for: Unit testing bash scripts, CI/CD integration
bashate
GitHub: https://github.com/openstack/bashate
Description: Style checker (used by OpenStack)
Installation:
pip install bashate
Usage:
bashate script.sh
bashate -i E006 script.sh # Ignore specific errors
Use for: Additional style checking beyond ShellCheck
checkbashisms
Package: devscripts (Debian)
Description: Checks for bashisms in sh scripts
Installation:
apt-get install devscripts # Ubuntu/Debian
Usage:
checkbashisms script.sh
checkbashisms -f script.sh # Force check even if #!/bin/bash
Use for: Ensuring POSIX compliance, portable scripts
Learning Resources
Interactive Tutorials
Bash Academy
- URL: https://www.bash.academy/
- Description: Modern, comprehensive bash tutorial
- Topics: Basics, scripting, advanced features
- Use for: Learning bash from scratch, structured learning path
Learn Shell
- URL: https://www.learnshell.org/
- Description: Interactive bash tutorial with exercises
- Use for: Hands-on practice, beginners
Bash Scripting Tutorial
- URL: https://linuxconfig.org/bash-scripting-tutorial
- Description: Comprehensive tutorial series
- Use for: Step-by-step learning, examples
Guides and Documentation
Bash Guide for Beginners
- URL: https://tldp.org/LDP/Bash-Beginners-Guide/html/
- Author: The Linux Documentation Project
- Description: Comprehensive guide covering basics to intermediate
- Use for: Structured learning, reference material
Advanced Bash-Scripting Guide
- URL: https://tldp.org/LDP/abs/html/
- Description: In-depth coverage of advanced bash topics
- Topics: Complex scripting, text processing, system administration
- Use for: Advanced techniques, real-world examples
Bash Hackers Wiki
- URL: https://wiki.bash-hackers.org/
- Alternative: https://flokoe.github.io/bash-hackers-wiki/ (maintained mirror)
- Description: Community-driven bash documentation
- Use for: In-depth explanations, advanced topics, edge cases
Greg's Wiki (Wooledge)
- URL: https://mywiki.wooledge.org/
- Key Pages:
- Description: High-quality bash Q&A and guides
- Use for: Common questions, avoiding pitfalls, best practices
Video Courses
Bash Scripting on Linux (Udemy)
- Description: Comprehensive video course
- Use for: Visual learners
Shell Scripting: Discover How to Automate Command Line Tasks (Udemy)
- Description: Practical shell scripting course
- Use for: Automation-focused learning
LinkedIn Learning - Learning Bash Scripting
- Description: Professional development course
- Use for: Structured corporate training
Community Resources
Stack Overflow
Bash Tag
- URL: https://stackoverflow.com/questions/tagged/bash
- Use for: Specific problems, code review, troubleshooting
Top Questions:
- URL: https://stackoverflow.com/questions/tagged/bash?tab=Votes
- Use for: Common problems and solutions
Unix & Linux Stack Exchange
URL: https://unix.stackexchange.com/
Shell Tag: https://unix.stackexchange.com/questions/tagged/shell Bash Tag: https://unix.stackexchange.com/questions/tagged/bash
Use for: Unix/Linux-specific questions, system administration
/r/bash
- URL: https://www.reddit.com/r/bash/
- Description: Bash scripting community
- Use for: Discussions, learning resources, help
/r/commandline
- URL: https://www.reddit.com/r/commandline/
- Description: Command-line interface community
- Use for: CLI tips, tools, productivity
IRC/Chat
Freenode #bash
- URL: irc://irc.freenode.net/bash
- Description: Real-time bash help channel
- Use for: Live help, quick questions
Libera.Chat #bash
- URL: irc://irc.libera.chat/bash
- Description: Alternative IRC channel
- Use for: Live community support
Books
"Classic Shell Scripting" by Arnold Robbins & Nelson Beebe
Publisher: O'Reilly ISBN: 978-0596005955
Topics:
- Shell basics and portability
- Text processing and filters
- Shell programming patterns
Use for: Comprehensive reference, professional development
"Learning the bash Shell" by Cameron Newham
Publisher: O'Reilly ISBN: 978-0596009656
Topics:
- Bash basics
- Command-line editing
- Shell programming
Use for: Systematic learning, reference
"Bash Cookbook" by Carl Albing & JP Vossen
Publisher: O'Reilly ISBN: 978-1491975336
Topics:
- Solutions to common problems
- Recipes and patterns
- Real-world examples
Use for: Problem-solving, practical examples
"Wicked Cool Shell Scripts" by Dave Taylor & Brandon Perry
Publisher: No Starch Press ISBN: 978-1593276027
Topics:
- Creative shell scripting
- System administration
- Fun and practical scripts
Use for: Inspiration, practical applications
"The Linux Command Line" by William Shotts
Publisher: No Starch Press ISBN: 978-1593279523 Free PDF: https://linuxcommand.org/tlcl.php
Topics:
- Command-line basics
- Shell scripting fundamentals
- Linux system administration
Use for: Beginners, comprehensive introduction
Cheat Sheets and Quick References
Bash Cheat Sheet (DevHints)
Content:
- Quick syntax reference
- Common patterns
- Parameter expansion
- Conditionals and loops
Use for: Quick lookups, syntax reminders
Bash Scripting Cheat Sheet (GitHub)
URL: https://github.com/LeCoupa/awesome-cheatsheets/blob/master/languages/bash.sh
Content:
- Comprehensive syntax guide
- Examples and explanations
- Best practices
Use for: Single-file reference
explainshell.com
URL: https://explainshell.com/
Description: Interactive tool that explains shell commands
Example: Paste tar -xzvf file.tar.gz to get detailed explanation of each flag
Use for: Understanding complex commands, learning command options
Command Line Fu
URL: https://www.commandlinefu.com/
Description: Community-contributed command-line snippets
Use for: One-liners, clever solutions, learning new commands
tldr Pages
URL: https://tldr.sh/ GitHub: https://github.com/tldr-pages/tldr
Description: Simplified man pages with examples
Installation:
npm install -g tldr
# Or
brew install tldr
Usage:
tldr tar
tldr grep
tldr find
Use for: Quick command examples, practical usage
Testing and Quality
Testing Frameworks
BATS (Bash Automated Testing System)
- URL: https://github.com/bats-core/bats-core
- Documentation: https://bats-core.readthedocs.io/
- Use for: Unit testing
shUnit2
- URL: https://github.com/kward/shunit2
- Description: xUnit-based unit testing framework
- Use for: Alternative to BATS
Bash Unit
- URL: https://github.com/pgrange/bash_unit
- Description: Bash unit testing
- Use for: Lightweight testing
CI/CD Integration
GitHub Actions Example
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install ShellCheck
run: sudo apt-get install -y shellcheck
- name: Run ShellCheck
run: find . -name "*.sh" -exec shellcheck {} +
- name: Install BATS
run: |
git clone https://github.com/bats-core/bats-core.git
cd bats-core
sudo ./install.sh /usr/local
- name: Run Tests
run: bats test/
GitLab CI Example
test:
image: koalaman/shellcheck-alpine
script:
- find . -name "*.sh" -exec shellcheck {} +
bats:
image: bats/bats
script:
- bats test/
Code Coverage
bashcov
- URL: https://github.com/infertux/bashcov
- Description: Code coverage for bash
- Installation:
gem install bashcov - Use for: Measuring test coverage
Platform-Specific Resources
Linux
Linux Man Pages
- URL: https://man7.org/linux/man-pages/
- Use for: Linux-specific command documentation
systemd Documentation
- URL: https://www.freedesktop.org/software/systemd/man/
- Use for: systemd service management
macOS
macOS Man Pages
- URL: https://www.freebsd.org/cgi/man.cgi
- Description: BSD-based commands (similar to macOS)
- Use for: macOS command differences
Homebrew
- URL: https://brew.sh/
- Use for: Installing GNU tools on macOS
Windows
Git for Windows
- URL: https://gitforwindows.org/
- Documentation: https://github.com/git-for-windows/git/wiki
- Use for: Git Bash on Windows
WSL Documentation
- URL: https://docs.microsoft.com/en-us/windows/wsl/
- Use for: Windows Subsystem for Linux
Cygwin
- URL: https://www.cygwin.com/
- Use for: POSIX environment on Windows
Containers
Docker Bash Best Practices
- URL: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
- Use for: Bash in containers
Container Best Practices
- URL: https://cloud.google.com/architecture/best-practices-for-building-containers
- Use for: Production container scripts
Advanced Topics
Process Substitution
Greg's Wiki:
- URL: https://mywiki.wooledge.org/ProcessSubstitution
- Use for: Understanding
<()syntax
Parameter Expansion
Bash Hackers Wiki:
- URL: https://wiki.bash-hackers.org/syntax/pe
- Use for: Complete parameter expansion reference
Regular Expressions
Bash Regex:
- URL: https://mywiki.wooledge.org/RegularExpression
- Use for: Regex in bash
[[ =~ ]]
PCRE vs POSIX:
- URL: https://www.regular-expressions.info/posix.html
- Use for: Understanding regex flavors
Parallel Processing
GNU Parallel:
- URL: https://www.gnu.org/software/parallel/
- Tutorial: https://www.gnu.org/software/parallel/parallel_tutorial.html
- Use for: Parallel command execution
Job Control
Bash Job Control:
- URL: https://www.gnu.org/software/bash/manual/html_node/Job-Control.html
- Use for: Background jobs, job management
Troubleshooting Resources
Debugging Tools
bashdb
- URL: http://bashdb.sourceforge.net/
- Description: Bash debugger
- Use for: Step-by-step debugging
xtrace
set -x # Enable
set +x # Disable
- Use for: Trace command execution
PS4 for Better Trace Output
export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
set -x
Common Issues
Bash Pitfalls
- URL: https://mywiki.wooledge.org/BashPitfalls
- Description: 50+ common mistakes in bash
- Use for: Avoiding and fixing common errors
Bash FAQ
- URL: https://mywiki.wooledge.org/BashFAQ
- Description: Frequently asked questions
- Use for: Quick answers to common questions
Summary: Where to Find Information
| Question Type | Resource |
|---|---|
| Syntax reference | Bash Manual, DevHints cheat sheet |
| Best practices | Google Shell Style Guide, ShellCheck |
| Portable scripting | POSIX specification, checkbashisms |
| Quick examples | tldr, explainshell.com |
| Common mistakes | Bash Pitfalls, ShellCheck Wiki |
| Advanced topics | Bash Hackers Wiki, Greg's Wiki |
| Testing | BATS documentation |
| Platform differences | Platform-specific docs, Stack Overflow |
| Troubleshooting | Stack Overflow, Unix & Linux SE |
| Learning path | Bash Academy, TLDP guides |
Quick Resource Lookup
When writing a new script:
- Start with template from Google Style Guide
- Use ShellCheck while developing
- Reference Bash Manual for specific features
- Check Bash Pitfalls for common mistakes
When debugging:
- Use
set -xfor tracing - Check ShellCheck warnings
- Search Bash Pitfalls
- Search Stack Overflow for specific error
When learning:
- Start with Bash Academy or TLDP
- Use explainshell.com for commands
- Read Greg's Wiki for in-depth topics
- Practice with BATS tests
When ensuring quality:
- Run ShellCheck
- Run shellcheck
- Format with shfmt
- Write BATS tests
- Review against Google Style Guide
These resources provide authoritative, up-to-date information for all aspects of bash scripting.