Shell

Shell 编程是通过脚本在命令行解释器中执行自动化任务的技术,是用户与操作系统内核之间的桥梁。

核心价值

  • 自动化:批量处理重复任务
  • 系统管理:运维操作
  • 胶水语言:串联不同程序

执行流程

读取命令 → 解析词元 → 判断内置命令 → 直接执行或创建子进程

关键机制

# 变量作用域
export VAR=value    # 环境变量
local var           # 局部变量
 
# 进程管理
gzip large.log &    # 后台运行
wait                # 等待完成
 
# 重定向
command > output.log 2>&1  # 合并输出

典型应用

# 日志备份
find /var/log -name "*.log" -mtime +7 | xargs tar czf backup.tgz
 
# Git 钩子
npm test && eslint src/
exit $?
 
# 数据处理
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

最佳实践

set -euo pipefail  # 严格模式
 
# 性能优化
$((a + b))         # 替代 expr
while read -r file # 替代 for in $(ls)
 
# 调试
bash -x script.sh
trap 'rm -rf /tmp/*' SIGINT

发展历程

年份里程碑
1971V6 Shell(首个 Shell)
1977Bourne Shell(sh)
1978C Shell(csh)
1989Bash
2020+Zsh、Fish 现代化扩展