课程介绍
学习 shell 的价值:
- Linux 服务器的基本操作和管理
- 前端 Node.is 服务的进程管理、问题排查、资源监控等运维操作
- 使用 shell 编写 TCE、SCM、Docker 脚本,完成服务编译和部署
1. Shell 基础概念
概念
名称 | 解释 |
---|
终端 | 获取用户输入、展示运算结果的硬件设备 |
tty | teletypeWriter的简称,和终端等价,早期指电传印机,在linux中是输入/输出环境 |
终端模拟器 | Mac Terminal、 iTerm2等,关联虚拟tty的输入输出软件 |
Shell | command interpreter, 处理来自终端模拟器的输入,解释执行之后输出结果给终端 |
Bash | shell的一种具体实现 |
构成

2. 命令和语法
类型 | 作用域 | 声明方式 | 规范 |
---|
自定义变量 | 当前shell | = | 字符串、整型、浮点型、日期型 |
环境变量 | 当前shell及其子shell | export、declare -x | |
系统环境变量 | 所有shell | 启动加载 | |
父子shell

自定义变量

3. 执行过程和原理
执行
- shell脚本一般以 .sh 结尾,也可以没有,这是一个约定:第一行需要指定用什么命令解释器来执行
1 #! /bin/bash
1 #! /usr/bin/env bash
- 启动方式
1 '# 文件名运行
2 ./filename.sh
3
4
5 # 解释器运行
6 bash ./filename.sh
7
8
9 # source 运行
10 source ./filename.sh
执行过程
- 字符解析
- 识别换行符、 分号(:) 做行的分割
- 识别命令连接符(|| && 管道) 做命令的分割
- 识别空格、tab符,做命令和参数的分割
- shell 展开,例如 {1..3] 解析为 1 2 3
- 重定向,将stdin、stdout、stderr的文件描述符进行指向变更
- 执行命令
- builtin 直接执行
- 非 builtin 使用 SPATH 查找,然后启动子进程执行
5.收集状态并返回
shell展开
- 大括号展开 (Brace Expansion) {...}
- 波浪号展开 (Tilde Expansion) ~
- 参数展开 (Shell Parameter Expansion)
- 命令替换 (Command Substitution)
- 数学计算 (Arithmetic Expansion) $((..))
- 文件名展开 (Filename Expansion) * ? [..] 外壳文件名模式匹配
4. 调试和前端集成
调试
- 普通log,使用 echo、printf
- 使用 set 命令
- vscode debug插件
VSCode配置
- shellman:代码提示和自动补全
- shellcheck:代码语法校验
- shell-format:代码格式化
- Bash Debug:支持单步调试
- 安装 scode 插件
- 编写 launch.json文件
- 升级 bash 到 4.x 以上版本
前端集成
- node中通过 exec、spawn 调用 shell 命令
- shell 脚本中调用 node 命令
- 借助 zx 等库进行javascript、shell script 的融合
- 借助 shell 完成系统操作,文件io 内存、磁盘系统状态查询等
- 借助 nodeis 完成应用层能力,网络io、计算等
课程总结
