家人们,我来交作业啦! 以下陈健老师主讲的Shell 脚本和编程课程的笔记。 通过这个课程,可以了解的内容有:
学习 shel1 的价值:
1.Linux 服务器的基本操作和管理
2.前端 Node.is 服务的进程管理、问题排查、资源监控等运维操作
3.使用 shell 编写 TCE、SCM、Docker 脚本,完成服务编译和部署
课程脉络为:
01 Shell 基础概念
02 命令和语法
03 执行过程和原理
04 调试和前端集成
01 Shell 基础概念
Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件,
它类似于DOS下的COMMAND.COM和后来的cmd.exe。
它接收用户命令,然后调用相应的应用程序。
同时它又是一种程序设计语言。
作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;
作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
文字操作系统与外部最主要的接口就叫做shell。
shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
02 命令和语法
02.1 sell的运算符和引用:
02.2 sell的管道:
管道与管道符|,作用是将前一个命令的结果传递给后面的命令
语法:cmd1cmd2
要求:管道右侧的命令必须能接受标准输入才行, 比如 grep 命令,ls、mv等不能直接使用,可以使用 xargs 预处理注意:管道命令仅仅处理 stdout,对于 stderr 会予以忽略,可以使用 set -o pipefail 设置 shell 遇到管道错误退出。(如图)
02.3 sell的重定向:
重定向指的是将原来从标准输入设备(键盘)输入的数据,该由从其他文件或设备输入;或将原来应该输出到标准输出设备(显示器)的内容,输出到其他文件或设备。
02.4 sell的判断命令:
shell 中提供了 test、[、[[ 三种判断符号, 可用于整数测试、字符串测试、文件测试
语法:(如图)
test condition
[ condition ]
[[ condition ]]
注意:
1 中括号前后要有空格符;
2 [ 和 test 是命令,只能使用自己支持的标志位,<、>= 只能用来比较字符串
3 中括号内的变量,最好都是用引号括起来
4 [ 更丰富,在整型比较中支持 <、>、= ,在字符串比较中支持 =~正则
03 执行过程和原理 03.1 执行过程:
1. 字符解析
识别换行符、 分号(;) 做行的分割。
识别命令连接符(I && 管道) 做命令的分割
识别空格、tab符,做命令和参数的分割
2.shell 展开,(如图)
例如{1..3) 解析为 123
3.重定向,将stdin、stdout、stderr的文件描述符进行指向变更
4.执行命令
builtin 直接执行
非 builtin 使用 SPATH 查找,然后启动子进程执行
5.收集状态并返回
shell 展开 的图示例:
04 调试和前端集成
04.1 调试:
1.普通log,使用 echo、printf:(如图)
2.使用 set 命令:(如图)
- vscode debug插件:
其中Bash Debug的步骤:
04.1 前端集成:
-
node中通过 exec、spawn 调用 shell 命令
-
shell 脚本中调用 node 命令
-
借助 zx 等库进行javascript、 shell script 的融合
借助 shell 完成系统操作,文件io、内存、磁盘系统状态查询等
借助 nodejs 完成应用层能力, 网络io、计算等