Shell基础
1.概念
(1)终端
获取用户输入、展示运算结果的设备
(2)ttr
teletyWriter的简称,和终端等价,早期指电传印记,在linux中是输入/输出环境
(3)终端模拟器
Mac Terminal、iTerm2等,关联虚拟tty的输入输出软件
(4)shell
command interpreter,处理来自终端模拟器输出,解释执行之后输出结果给终端
(5)Bash
shell的一种具体实现
2.构成
(1)解释器
1)bash内置命令
2)GNU核心工具箱
3)第三方库
(2)编程语言
1)变量:自定义变量、环境变量、系统环境变量
2)运算:逻辑运算符,算术运算符
3)语句:判断、分支、循环
4)函数
语法和命令
1、变量
| 类型 | 作用域 | 声明方式 | 规范 |
|---|---|---|---|
| 自定义变量 | 当前shell | = | 字符串、整形、浮点型、日期型 |
| 环境变量 | 当前 | export、declare -x | |
| 系统环境变量 | 所有shell | 启动加载 | |
| 2、自定义变量 |
| 选项 | 含义 |
|---|---|
| - | 给变量设定类型属性 |
| + | 取消变量的类型属性 |
| -a | 将变量声明为数组类型 |
| -i | 将变量声明为整数型 |
| -x | 将变量声明为环境变量 |
| -r | 将变量声明为只读变量 |
| -p | 显示指定变量的被声明的类型 |
3.管道
管道与管道符|,作用是将前一个命令的结果传递给后面的命令
(1)语法:cmd1|cmd2
(2)要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,Is、mv等不能直接使用,可以使用xargs预处理
(3)注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set-o pipefail设置shell遇到管道错误退出
4.重定向
5.判断命令
(1)shell中提供了test、[ 、[[ 三种判断符号,可用于:
1)整数测试
2)字符串测试
3)文件测试
(2)语法
1)test condition
2)[condition]
3)[[condition]]
(3)注意
1)中括号前后要有空格符
2)[和test是命令,只能使用自己支持的标志位,<、>、=只能用来比较字符串
3)中括号内的变量,最好都是用引号括起来
4)[[更丰富,在整型比较中支持<,>,=,在字符串中支持=~正则
6.循环
(1)while循环
(2)until循环
(3)for循环
执行过程和原理
1.执行
(1)shell脚本一般以.sh结尾,也可以没有,这是一个约定;第一行需要指定用什么命令解释器来执行
2.执行过程
(1)字符解析
1)识别换行符、分号(;)做行的分割
2)识别命令连接符(||&&管道)做命令的分
3)识别空格、tab符,做命令的分割
4)执行命令
·builtin直接执行
·非builtin使用$PATH查找,然后启动子进程执行
5)收集状态并返回
3.shell展开
(1)大括号展开{...}
(2)波浪号展开~
(3)参数展开
(4)命令替换
(5)数字计算
(6)文件名展开*?[..]外壳文件名模式匹配
调试和前端集合
1.调试
(1)普通log,使用echo、printf
(2)使用set命令
(3)vscode debug插件
2.前端集成
(1)node中通过exec、spawn调用shell命令
(2)shell脚本中调用node命令
(3)借助zx等库进行JavaScript、shell script
#总结