前端训练营第3节笔记

88 阅读3分钟

前端训练营第3节笔记

shell脚本和编程

image.png

shell 的历史演变

物理终端 =>软件终端 tty =>终端模拟器 => shell

tty:或者说终端最开始指的是获取用户输入并输出的物理设备, 比如电传打字机

在 linux 中是接收用户输入、输出结果的终端仿真软件,比如我们用的 mac terminal、 iterm2 等,更强输入辅助功能、画面绘制输出的模拟终端器

而 tty变成一个虚拟概念,是linux的一个程序,每个终端模拟器关联一个虚拟tty,和内核打交道,我们可以在 终端模拟器中输入 tty 查看关联到的虚拟 tty

bash是 shell的一种具体实现,可以理解成 实例和类的关系。

即 bash是 sh 的超集,可以直接执行大部分 sh 脚本。 Bash 在兼容 Bourne shell脚本编程的同时,集成了 Kom shell和C shell的功能,包括命令历史,命令行编辑,目录堆栈(pushd 和 popd) ,一些实用环境安量,命令自动补全等。

shell介绍

shell 既是命令解释器也是一门编程语言

image.png

shell命令

image.png

管道

作用:将前一个命令输出传递给后一个命令输入

注意:1,ls,mv需要 外加 xargs命令预处理,让xargs将输出传递给ls

2,仅处理标准输出stdout,忽略错误输出stderr,需要加set -o pipefail设置遇到管道错误时退出

重定向

每个shell命令在执行的时候都会打开三个文件描述符,0,1,2分别对应标准输入,标准输出,标准错误,其默认指向如图1所示,改变这些描述符指向的行为称为重定向(输入重定向和输出重定向) image.png图1

image (1).png图2

image.png图3

注意:2>&中 &必须在>后面

<< 的作用是 右侧为给定一个限定值,在执行到限定值的时候,输出结果

判断命令

利用test、[、[ ]三种判断符号进行判断

可进行 整数、字符串、文件 的测试:

test condition,[codition],[[codition]]

PS:

  1. 中括号前后要有空格符

  2. [ 和 test 是命令,只能使用自己支持的标志位,=、>、< 只能用来比较字符串

  3. 中括号内的变量,最好都是用引号括起来

  4. [[ 更丰富,在整型比较中支持<、>、=,在字符串比较中支持 =~ 正则

例:

image.png -** 即为标志位

整数位:-eq,-lt,-gt分别为判断等于,小于,大于

字符串:-z判断是否为空,-n判断是否非空,=判断是否相等

文件测试:-e 判断文件是否存在;-f判断文件是否存在并为一个普通文件

当$name没有被字符串符号引用会报错,加上字符串就没问题 image.png

分支语句

image (2).png

image (3).png

例子:

image.png

image.png

image.png

循环

image (4).png

image (5).png

image (6).png

until跟while循环相反

函数

image (9).png

image (8).png

image (7).png

PS:函数内部定义变量用 local 限定作用域防止污染全局,不用local可以用unset

模块化

source 函数库的路径

image.png

image.png

常用指令

image (10).png

shell执行过程及原理

shell脚本一般以.sh文件名为结尾,也可以没有,是一个约定

第一行需要指定用什么命令行解释器执行↓

image.png

image.png

PS:#!是内核识别并选择合适的解释器之后,将文本文件再交给解释器执行

image.png

前两种子进程执行,source是当前进程执行

执行过程

1,字符解析。2,shell展开。3,重定向。4,执行命令(内置命令直接执行;非内置命令$PATH查找,找到后用子进程执行)。5,收集状态返回给用户脚本

字符解析

将大段的命令行分段,分别做行的分割,命令的分割,命令和参数的分割。

行的分割:识别 ;和换行符(回车)

命令的分割:识别 && || 和 管道

命令和参数的分割:识别空格和tab符等

shell展开

image (11).png

1,

image.png

2,

image.png

3,

一、 image.png

二、 image.png

三、

image.png

五、

image.png 注意:截取后剩下的部分复制,而不是将截取的部分赋值

(4) image.png

(6) image.png

调试和前端集成

1,echo或printf。2,set命令。3,vscode debug。

image (12).png

前端集成

image (13).png

exec与spawn的区别:exec在子shell执行传入命令,执行结果存入缓冲区,执行完再将缓冲区结果回调,缓冲区有限制,默认为200kb,超过200kb会报错

spawn不会启动子shell,且返回一个流对象,可以直接进行流对象操作,无需缓冲,没有大小限制,适合大数据量的操作

课程总结

image.png