1.概念
(1)终端:获取用户输入,展示运算结果的硬件属性
(2)Tty:teletypewriter的简称,和终端等价,早期指电传打印机,在Linux中是输入\输出环境。
(3)终端模拟器:Mac Terminal,iTerm2等,关联虚拟tty的输入输出软件。
(4)Shell:command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给终端。
(5)Bash:shell的一种具体实现
2. 构成
(1)解释器:bash内置命令,GNU核心工作集,第三方库
(2)编程语言:变量(自定义变量,环境变量,系统环境变量),运算(逻辑运算符,算数运算符),语句(判断,分支,循环),函数。
Shell不仅提供了与内核和设备交互的方法,还集成了一些今天软件开发中通用的设计模式(比如管道和过滤器),具备控制流程,循环,变量,命令查找的机制。
语法和命令
(1)变量:
- 自定义变量:当前shell(作用域);=(声明方式);字符串,整型,浮点型,日期型(规范);
- 环境变量:当前shell及其子shell(作用域);export,declare-x(声明方式);
- 系统环境变量:所有shell(作用域);启动加载(声明方式);
(2)管道
- 管道与管道符|,作用是将前一个命令的结果传递给后面的命令。
- 语法:cmd1|cmd2
- 要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls,mv等不能直接使用,可以使用xargs预处理。
- 注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set-o pipefail设置shell遇到管道错误tt
(3)重定向
- 输出重定向符号:>(覆盖写入文件);>>(追加写入文件);2>:(错误输出写入文件);&>:(正确和错误输出统一写入到文件中)
- 输入重定向符号:<;<<.
3. 调试和前端集成
(1)调试:
- 普通log,使用echo,printf;
- 使用set命令;
- vscode debug插件;
(2)VSCode配置
- Shellman:代码提示和自动补全;
- Shellcheck:代码语法校验;
- Shell—format:代码格式化;
- Basu Debug:支持单步调试
(3)前端继承
- Node通过exec,spawn调用shell命令;
- Shell脚本中调用node命令;
- 借助zx等库进行javascript,shell script的融合。