L2 | 青训营笔记

65 阅读2分钟

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