Shell脚本和编程
Shell基础概念
- 终端:获取用户输入、展示运算结果的硬件设备
- tty:teletypeWriter的简称,和终端等价,早起指电传打印机,Linux中是 输入/输出 环境
- 终端模拟器:Mac terminal、ITerm2等,关联虚拟tty的输入输出软件
- Shell:command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给终端
- Bash:shell的一种具体实现
Shell命令与语法
-
变量
- 自定义变量
- 环境变量
- 系统环境变量
执行过程
-
字符解析
- 识别换行符、分号 做行的分割
- 识别命令连接符 做命令的分割
- 识别空格、Tab符 做命令和参数的分割
-
shell展开
- 大括号展开
- 波浪号展开
- 参数展开
- 命令替换
- 数学计算
- 文件名展开
-
重定向
- 将stdin、stdout、stderr的文件描述符进行指向变更
-
执行命令
- builtin直接执行
- 非builtin使用$PATH查找,然后启动子进程执行
-
收集状态并返回
编程范式
编程语言
-
机器语言
-
汇编语言
-
中级语言
- 面向过程代表 C
-
高级语言
- 面向对象代表 C++
- 函数式代表 lisp
- 多范式代表 JavaScript
编程范式
-
命令式
-
面向过程
- 自顶向下
- 结构化编程
- 缺点:数据与算法关联弱、不利于修改扩充和代码重用
-
面向对象
- 封装:关联数据与算法
- 继承:无需重写的情况下进行功能扩充
- 多态:不同的结构可以进行接口共享,进而达到函数复用
- 依赖注入:去除代码耦合
-
面向对象编程五大原则
- 单一职责原则SRP
- 开放封闭原则OCP
- 重式替换原则LSP
- 依赖倒置原则DIP
- 接口分离原则ISP
-
-
声明式
- 函数式
- 一等函数
- 纯函数:可缓存、可移植、可测试、可推理、可并行
- 响应式
- observable
- 操作符
- monad
- 函数式
领域特定语言
-
创造DSL
- lexer
- parser
- tools
- visitor