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
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!