学习shell的价值
1.Linux服务器的基本操作和管理
2.前端Node.js服务的进程管理、问题排查、资源监控等运维操作
3.使用shell编写TCE、SCM、Docker脚本,完成服务器编译和部署
shell基础概念
概念
终端:获取用户输入,展示运算结果的硬件设备
shell构成
命令和语法
自定义变量
系统环境变量
配置文件加载
管道
管道与管道符|,作用是将前一个命令的结果传递给后面的命令
语法:cmd1 | cmd2
要求:管道符右侧的命令必须能接受标准输入才行
重定向
判断命令
-
整数测试
-
字符串测试
-
文件测试
语法 -
test condition
-
[condition]
-
[[condition]]
注意 -
中括号前后要有空格符;
-
[和test是命令,只能使用自己支持的标志位,<、>、=只能用来比较字符串
-
中括号内的变量,最好都是用引号括起来
-
[[更丰富,在整型比较中支持<、>、=,在字符串中支持=~正则
执行过程和原理
执行
1.shell脚本一般以.sh结尾,也可以没有,这是一个约定;第一行需要指定用什么命令解释器来执行
2.启动方式
执行过程
1.字符解析
- 识别换行符、分号做行的分割
- 识别命令连接符(||&&管道)做命令的分割
- 识别空格、tab符,做命令和参数的分割
2.shell展开,例如{1..3}解析为1 2 3
3.重定向,将stdio,stdout,stderr的文件描述进行指向变更
4.执行命令
- builtin直接执行
- 非builtin使用$PATH查找,然后启动子进程执行
5.收集状态并返回
调试和前端集成
调式
- 普通log,使用echo、print
- 使用set命令
- vscode debug插件
前端集成
- node中通过exec、spawn调用shell命令
- shell脚本中调用node命令
- 借助zx等库进行javascript、shell script的融合