Shell脚本和编程
课程介绍:
- Linux 服务器的基本操作和管理
- 前端 node.js服务的进程管理、问题排查、资源监控等运维操作
- 使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署
课程准备:
- 一台安装了Linux系统的物理机或者云机,可运行shell脚本
- 本地的vscode安装Bash Debug插件,并升级bash到4.x以上
- Npm全局安装zx依赖
课程内容
- shell基础概念
- 命令和语法
- 执行过程和原理
- 调试和前端集成
一、shell基础概念
① 概念图
② 发展图
③ 构成图
二、语法和命令
① 变量
② 自定义变量
`#!/bin/bash #变量名=变量值(等号左右不能有空格) page_size=1 page_num=2
#将命令复制给变量 _ls=ls
#将命令结果赋值给变量 file_list=$(ls -a)
#默认字符串,不会进行+运算 total=page_size*page_num
#声明变量为整型 let total=page_size*page_num
declare -i total=page_size*page_num
#导出环境变量 export total
declare -x total`
③ 系统环境变量
④ 配置文件加载
⑤ 运算符和引用
⑥ 管道
- 管道与管道符|,作用是将前一个命令的结果传递给后面的命令
- 语法:cmd1 | cmd2
- 要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls,mv等不能直接使用,可以使用xargs预处理
- 注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set -o pipefall设置shell遇到管道错误退出
`#!/bin/bash
cat platform.access.log | grep ERROR
netstat -an | grep ESTABLISHED | wc -1
find . -maxdepth 1 -name ".sh" | ls -1`
⑦ 重定向
- 输出重定向符号:
1. > : 覆盖写入文件
2. >>: 追加写入文件
3. 2 >: 错误输出写入文件
4. &:正确和错误输出统一写入到文件中
- 输入重定向符号:< << ...
⑧ 判断命令
⑨ 分支语句
⑩ 循环
11.函数
12.模块化
13.常用命令
三、执行过程和原理
① 执行
② 执行过程
- 字符解析
- 识别换行符,分号(;)做行的分割
- 识别命令连接符(|| && 管道)做命令的分割
- 识别空格,tab符,做命令和参数的分割
-
shell展开,例如 {1..3}解析为 1 2 3
-
重定向,将student,stdout,stderr的文件描述符进行指向变更
4.执行命令
- builitin 直接执行
- 非 builitin 使用 $PATH 查找,然后启动子进程执行
5.收集状态并返回
③ shell展开
- 大括号展开 {...}
- 波浪号展开 ~
- 参数展开
- 命令替换
- 数字计算 $((...))
- 文件名展开 * ? [..] 外壳文件名模式匹配
1.大括号展开
2.波浪号展开
3.参数展开
4.命令替换
5.数字计算
6.文件名扩展
调试和前端集成
① 调试
② VSCode配置
-
shellman: 代码提示和自动补全
-
shellcheck:代码语法校验
-
shell-format:代码格式化
-
Bash Debug:支持单步调试
- 安装vscode插件
- 编写launch.json文件
- 升级bash到4.x以上版本
③ 前端集成
-
node中通过exec,spawn调用shell命令
-
shell脚本中调用node命令
3.借助zx等库进行JavaScript,shell script的融合
- 好啦,以上是shell脚本和编程的笔记整理,若内容有疏忽请大家指出,感谢各位小伙伴的阅读~