张芷铭的个人博客

Shell

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

核心价值

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

执行流程

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

关键机制

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 变量作用域
export VAR=value    # 环境变量
local var           # 局部变量

# 进程管理
gzip large.log &    # 后台运行
wait                # 等待完成

# 重定向
command > output.log 2>&1  # 合并输出

典型应用

1
2
3
4
5
6
7
8
9
# 日志备份
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

最佳实践

1
2
3
4
5
6
7
8
9
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 现代化扩展

Comments