Bash Linux Patterns
Essential patterns for Bash on Linux/macOS.
1. Operator Syntax
Chaining Commands
| Operator | Meaning | Example | |
|---|
; | Run sequentially | cmd1; cmd2 | |
&& | Run if previous succeeded | npm install && npm run dev | |
| `\ | \ | ` | Run if previous failed | `npm test \ | \ | echo "Tests failed"` | |
| `\ | ` | Pipe output | `ls \ | grep ".js"` | |
2. File Operations
Essential Commands
| Task | Command | |
|---|
| List all | ls -la | |
| Find files | find . -name "*.js" -type f | |
| File content | cat file.txt | |
| First N lines | head -n 20 file.txt | |
| Last N lines | tail -n 20 file.txt | |
| Follow log | tail -f log.txt | |
| Search in files | grep -r "pattern" --include="*.js" | |
| File size | du -sh * | |
| Disk usage | df -h | |
3. Process Management
| Task | Command | |
|---|
| List processes | ps aux | |
| Find by name | `ps aux \ | grep node` | |
| Kill by PID | kill -9 <PID> | |
| Find port user | lsof -i :3000 | |
| Kill port | kill -9 $(lsof -t -i :3000) | |
| Background | npm run dev & | |
| Jobs | jobs -l | |
| Bring to front | fg %1 | |
4. Text Processing
Core Tools
| Tool | Purpose | Example | |
|---|
grep | Search | grep -rn "TODO" src/ | |
sed | Replace | sed -i 's/old/new/g' file.txt | |
awk | Extract columns | awk '{print $1}' file.txt | |
cut | Cut fields | cut -d',' -f1 data.csv | |
sort | Sort lines | sort -u file.txt | |
uniq | Unique lines | `sort file.txt \ | uniq -c` | |
wc | Count | wc -l file.txt | |
5. Environment Variables
| Task | Command | |
|---|
| View all | env or printenv | |
| View one | echo $PATH | |
| Set temporary | export VAR="value" | |
| Set in script | VAR="value" command | |
| Add to PATH | export PATH="$PATH:/new/path" | |
6. Network
| Task | Command | |
|---|
| Download | curl -O https://example.com/file | |
| API request | curl -X GET https://api.example.com | |
| POST JSON | curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' URL | |
| Check port | nc -zv localhost 3000 | |
| Network info | ifconfig or ip addr | |
7. Script Template
bash
#!/bin/bash
set -euo pipefail # Exit on error, undefined var, pipe fail
# Colors (optional)
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
# Script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Functions
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1" >&2; }
# Main
main() {
log_info "Starting..."
# Your logic here
log_info "Done!"
}
main "$@"
8. Common Patterns
Check if command exists
bash
if command -v node &> /dev/null; then
echo "Node is installed"
fi
Default variable value
bash
NAME=${1:-"default_value"}
Read file line by line
bash
while IFS= read -r line; do
echo "$line"
done < file.txt
Loop over files
bash
for file in *.js; do
echo "Processing $file"
done
9. Differences from PowerShell
| Task | PowerShell | Bash | |
|---|
| List files | Get-ChildItem | ls -la | |
| Find files | Get-ChildItem -Recurse | find . -type f | |
| Environment | $env:VAR | $VAR | |
| String concat | "$a$b" | "$a$b" (same) | |
| Null check | if ($x) | if [ -n "$x" ] | |
| Pipeline | Object-based | Text-based | |
10. Error Handling
Set options
bash
set -e # Exit on error
set -u # Exit on undefined variable
set -o pipefail # Exit on pipe failure
set -x # Debug: print commands
Trap for cleanup
bash
cleanup() {
echo "Cleaning up..."
rm -f /tmp/tempfile
}
trap cleanup EXIT
Remember: Bash is text-based. Use && for success chains, set -e for safety, and quote your variables!