shell脚本和编程 | 青训营笔记

78 阅读2分钟

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的融合。