这是我参与「字节前端初阶青训营」伴学笔记创作活动的第3天。
课堂笔记
一、Shell基础概念
1、概念
- 终端
获取用户输入、展示运算结果的硬件设备
- tty
teletypewriter的简称. 和终端等价早期指电传印机.在linux中是输入/输出环境
- 终端模拟器
Mac Terminal、 iTerm2等.关联虚拟tty的输入输出软件
- Shell
command interpreter.处理来自终端模拟器的输入.解释执行之后输出结果给终端
- Bash
shell的一种具体实现
2、发展
- Ken Thompson(来自贝尔实验空)在1971年为UNIX开发了第一个 shell,称为V6 shell
- Stephen Bourne在贝尔实验空为V7 UNIX所开发的Bourne shell ,即sh
- 开源组织GNU为了取代 Bourne shell开发的Bourne-Again shell,即 Bash
3、构成
二、命令和语法
1、变量
2、系统环境变量
3、自定义变量
4、配置文件加载
5、运算符和引用
6、管道
管道与管道符|,作用是将前一个命令的结果传递给后面的命令
语法: cmd1 | cmd2
要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以使用xargs预处理
注意:管道命令仅仅处理 stdout,对于stderr 会予以忽略,可以使用set -o pipefail设置 shell 遇到管道错误退出
7、重定向
8、判断命令
9、分支语句
10、循环
- while循环
while condition ; do程序段;done
- until循环
until condition ; do程序段; done
- for循环
for var in [words . . .]; do程序段; done
11、函数
语法一:
funcName0f echo "abc "; }
语法二:
function funcName0 { echo "abc"; }
注意:
- shell自上而下执行,函数必须在使用前定义
- 函数获取变量和 shell script类似,1、$2 ...获取。
- 函数内return仅仅表示函数执行状态,不代表函数执行结果
- 返回结果一般使用echo、printf,在外面使用$() 、‘ ’获取结果
- 如果没有return ,函数状态是上一条命令的执行状态,存储在$?中
12、模块化
模块化的原理是在当前she17 内执行函数文件,方式:
source[函数库的路径]
13、常用命令
三、执行过程和原理
1、执行
2、执行过程
3、shell展开
-
大括号展开(Brace Expansion) {...}
一般由三部分构成,前缀、一对大括号、后缀,大括号内可以是逗号分割的字符串序列,也可以是序列表达式fx.y[..incr]
-
波浪号展开(Tilde Expansion) ~
-
参数展开(Shell Parameter Expansion){!parameter},其中引用的参数并不是parameter而是parameter的实际的值
2.参数长度$ {#parameter}
3.空参数处理 fparameter :-word} #为空替换 'parameter:=word} # 为空替换,并将值赋给 fparameter : ?word} #为空报错 $ fparameter : +word} #不为空替换
4.参数切片 iparameter:offset:length}
5.参数部分删除 {parameter%word}#最小限度从后面截取word {parameter9%word}#最大限度从后面截取word {parameter#word}#最小限度从前面截取word {parameterllword}#最大限度从前面截取word
-
命令替换(Command Substitution)
在子进程中执行命令,并用得到的结果替换包裹的内容,形式上有两种: $(...)或`...
-
数学计算(Arithmetic Expansion)$((..))
使用$(0)包裹数学运算表达式,得到结果并替换
-
文件名展开(Filename Expansion) * ?[..]外壳文件名模式匹配
当有单词没有被引号包裹,且其中出现了‘*’, ‘?’, and‘[’字符,则shell会去按照正则匹配的方式查找文件名进行替换,如果没找到则保持不变。
四、调试和前端集成
1、调试
- 普通log,,使用echo、printf
- 使用set命令
- vscode debug插件
2、VsCode配置
1.she11man:代码提示和自动补全
2.she1lcheck:代码语法校验
3.she11一format:代码格式化
4.Bash Debug:支持单步调试
-安装vscode插件 –编写launch. json文件 -升级 bash到4.x以上版本
3、前端集成
- node中通过exec、spawn调用shell命令
- shell脚本中调用node命令
- 借助zx等库进行javascript、shell script的融合
-借助shell完成系统操作,文件io、内存、磁盘系统状态查
-借助nodejs 完成应用层能力,网络io、计算等