--- name: bash-linux description: Bash/Linux terminal patterns. Critical commands, piping, error handling, scripting. Use when working on macOS or Linux systems. allowed-tools: Read, Write, Edit, Glob, Grep, Bash --- # 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 ` | | 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!