全部技能
Shell Scripting
Automate everything with Bash, Zsh, and command-line tools
⬢ 層級 2技術
中等
薪資影響
2 個月
學習時長
中等
難度
1
職業
一覽
Shell scripting (Bash, Zsh, POSIX sh) automates deployment, configuration, and operational tasks across Unix/Linux systems. Supplementary skill that unlocks senior DevOps and SRE roles: junior uses scripts for basic automation (+$10-15k), mid-level orchestrates complex pipelines with sed/awk/jq (+$15-20k), senior tunes performance and writes portable frameworks (+$20-25k). Prerequisite for backend/DevOps tier advancement. Time investment: 1-3 months for proficiency. Tools: bash, zsh, sed, awk, grep, find, xargs, jq, ShellCheck. Not a primary career path (unlike programming languages), but mandatory foundation.
什麼是 Shell Scripting
- Shell scripts being replaced by Python for complex logic - ShellCheck and shfmt standardizing script quality
🔧 工具與生態
bashzshPOSIX shsedawkgrepfindxargsjqShellCheckfishcurl
💰 各地區薪資
| 地區 | 初級 | 中級 | 高級 |
|---|---|---|---|
| USA | $85,000 | $115,000 | $160,000 |
| UK | £52,000 | £70,000 | £98,000 |
| EU | €58,000 | €78,000 | €110,000 |
| CANADA | CA$88,000 | CA$120,000 | CA$168,000 |
🎓 認證
🎯 使用 Shell Scripting 的職業
❓ 常見問題
Bash vs Zsh, which should I learn?
Bash: 30+ years, universal (ships on every Unix/Linux/Mac), POSIX-compatible, scripts run everywhere. Zsh: modern, interactive features (completion, history), friendly syntax. Learn Bash first for portability and career breadth, it's the standard for deployment scripts and cron jobs. Zsh after, for your personal shell. Write production scripts in Bash, interactive shell in Zsh. Zsh on macOS is now default, but servers still run Bash.
When should I use Python instead of shell scripts?
Use shell for: file operations, tool orchestration, simple data pipelines, deployment steps, cron jobs, quick 10-50 line tasks. Use Python for: complex logic, data structures, unit testing, maintenance >1000 lines, portability across OS (Windows, macOS, Linux), dependency management. Rule: if your script needs classes, error handling beyond `set -e`, or complex iteration, switch to Python. If it's gluing tools together, stay in shell.
How do I handle errors properly in shell scripts?
Start every script with `set -euo pipefail`: -e stops on error, -u errors on undefined vars, -o pipefail fails if any pipe stage fails. Use functions with explicit return codes. Trap errors: `trap 'echo Error at line $LINENO' ERR`. Quote all variables: `"$var"` not `$var`. Test edge cases: empty input, special characters, large files. Use ShellCheck (`shellcheck script.sh`) to catch common mistakes before runtime.
What does ShellCheck do and why should I use it?
ShellCheck is a linter that finds bugs and portability issues before runtime. It catches: unquoted vars, unreachable code, deprecated syntax, inefficient patterns. Run on every script: `shellcheck myscript.sh`. Integrates with editors (VSCode ShellCheck extension). Warnings = code smell, errors = bugs. Passing ShellCheck is non-negotiable for production scripts. Disable warnings sparingly (`# shellcheck disable=SC2086`) only when you understand the risk.
How do dotfiles work and should I version control them?
Dotfiles (.bashrc, .zshrc, .config/) are shell config and environment setup. Version control them in a git repo (with a README explaining symlinks or bootstrap script). Symlink into home: `ln -s ~/dotfiles/.bashrc ~/.bashrc`. Benefits: reproducible environment, share across machines, collaborate with team. Never hardcode secrets (use .env or `pass` password manager). Popular pattern: `~/dotfiles/install.sh` creates symlinks, runs once per machine.
What are common pitfalls and how do I avoid them?
Pitfall 1: Not quoting variables, causes word splitting and globbing. Fix: `"$var"` always. Pitfall 2: Using `ls` in scripts, parsing output fails with spaces. Fix: use glob patterns or `find`. Pitfall 3: Parsing JSON/YAML with regex, fragile. Fix: use `jq` (JSON) or `yq` (YAML). Pitfall 4: Hardcoding paths, breaks on different systems. Fix: use `$HOME`, `readlink -f`, or relative paths. Pitfall 5: No error context, hard to debug. Fix: add logging and use `PS4` for trace output.
How do I make my shell scripts portable across systems?
Write POSIX-compliant code, not Bash-only. Use `#!/bin/sh` not `#!/bin/bash` when possible. Avoid: `[[]]` (use `[]`), `=~` regex (use `grep`), arrays (use loops). Check syntax: `sh -n script.sh`. Test on multiple systems (Mac, Linux, BSD). Use `env bash` in shebang if Bash required. Document dependencies (jq, curl, awk version). Use `command -v` to check if tools exist before using. Ship with `install.sh` that checks requirements.
不確定這項技能適不適合你?
做一下職業匹配,我們會推薦合適的方向。
找到最適合我的技能 →找到理想的職業方向
在 2,521 個職業中進行技能匹配。免費。
免費做職業匹配 →