Bash Linux Patterns
Essential patterns for Bash on Linux/macOS.
- 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"
- 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
- 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
- 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
- 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"
- 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
- Script Template
#!/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 "$@"
- Common Patterns
Check if command exists
if command -v node &> /dev/null; then echo "Node is installed" fi
Default variable value
NAME=${1:-"default_value"}
Read file line by line
while IFS= read -r line; do echo "$line" done < file.txt
Loop over files
for file in *.js; do echo "Processing $file" done
- 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
- Error Handling
Set options
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
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!