学习shell的价值
- Linux 服务器的基本操作和管理
- 前端 Node.is 服务的进程管理、问题排查、资源监控等运维操作
- 使用 shell 编写 TCE、SCM、Docker 脚本,完成服务编译和部署
一、Shell基础概念
1. 概念
- 终端、终端模拟器、TTY、Shell、Bash
2. 构成
- 解释器、编程语言
二、语法和命令
1.变量
- 自定义变量
- 环境变量
- 系统环境变量
2.运算符和引用
- 类型
- 算数运算符
- 逻辑运算符
- 比较运算符
- 引号
- 圆括号
- 命令连接
- 后台运行
3.管道
管道与管道符|,作用是将前一个命令的结果传递给后面的命令
- 语法:cmd1 | cmd2
- 要求:管道右侧的命令必须能接受标准输入才行, 比如 grep 命令, s、mv等不能直接使用,可以使用 xargs 预处理
- 注意: 管道命令仅仅处理 stdout, 对于 stderr 会予以忽略,可以使用 set-o pipefail 设置 shell 遇到管道错误退出
还有重定向、判断命令、分支语句、循环、函数、模块化、常用命令。
三、执行过程和原理
1.执行
- shell脚本一般以 .sh 结尾, 也可以没有, 这是一个约定; 第一行需要指定用什么命令解释器来执行
- 启动方式
2.执行过程
- 字符解析
- 识别换行符、分号() 做行的分割
- 识别命令连接符( && 管道) 做命令的分割
- 识别空格、tab符,做命令和参数的分割
- shell 展开,例如1..3? 解析为 12 3
- 重定向,将stdin、stdout、stderr的文件描述符进行指向变更
- 执行命令
- builtin 直接执行
- 非builtin 使用 SPATH 查找,然后启动了进程执行
- 收集状态并返回
四、调试和前端集成
1.调试
- 普通log,使用 echo、printf
- 使用 set 命令
- vscode debug插件
2.VsCode 配置
- shellman:代码提示和自动补全
- shellcheck:代码语法校验
- shell-format:代码格式化
- Bash Debug: 支持单步调试
3.前端集成
-
node中通过 exec、spawn 调用 shell 命令
-
shell 脚本中调用 node 命令
-
借助 zx 等库进行 javascript、shell script 的融合