Shell脚本和编程 | 青训营笔记

180 阅读2分钟

143866439792594462.jpg

Shell脚本和编程

课程介绍:

  • Linux 服务器的基本操作和管理
  • 前端 node.js服务的进程管理、问题排查、资源监控等运维操作
  • 使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署

课程准备:

  • 一台安装了Linux系统的物理机或者云机,可运行shell脚本
  • 本地的vscode安装Bash Debug插件,并升级bash到4.x以上
  • Npm全局安装zx依赖

课程内容

  1. shell基础概念
  2. 命令和语法
  3. 执行过程和原理
  4. 调试和前端集成

一、shell基础概念

① 概念图

312142720785704773.jpg

② 发展图

650067074718747001.jpg

③ 构成图

131857182231929703.jpg

二、语法和命令

① 变量

884724835099607080.jpg

② 自定义变量

`#!/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`

882142300479838534.jpg

③ 系统环境变量

757111615398455584.jpg

④ 配置文件加载

220624268028864200.jpg

⑤ 运算符和引用

159824799315663338.jpg

⑥ 管道

  • 管道与管道符|,作用是将前一个命令的结果传递给后面的命令
  • 语法: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. &:正确和错误输出统一写入到文件中
  • 输入重定向符号:< << ...

438191388392849175.jpg

⑧ 判断命令

607857028024981659.jpg

⑨ 分支语句

519567438905641998.jpg

⑩ 循环

398851856638429576.jpg

11.函数

142721194381034253.jpg

12.模块化

359579120528304543.jpg

13.常用命令

509584210991526807.jpg

三、执行过程和原理

① 执行

560313860225984038.jpg

② 执行过程

  1. 字符解析
  • 识别换行符,分号(;)做行的分割
  • 识别命令连接符(|| && 管道)做命令的分割
  • 识别空格,tab符,做命令和参数的分割
  1. shell展开,例如 {1..3}解析为 1 2 3

  2. 重定向,将student,stdout,stderr的文件描述符进行指向变更

4.执行命令

  • builitin 直接执行
  • 非 builitin 使用 $PATH 查找,然后启动子进程执行

5.收集状态并返回

200647778011561207.jpg

③ shell展开

  1. 大括号展开 {...}
  2. 波浪号展开 ~
  3. 参数展开
  4. 命令替换
  5. 数字计算 $((...))
  6. 文件名展开 * ? [..] 外壳文件名模式匹配

1.大括号展开

752980672387960055.jpg

2.波浪号展开

480334866606025472.jpg

3.参数展开

642466727698278408.jpg

4.命令替换

31717639965075557.jpg

5.数字计算

572426449385138765.jpg

6.文件名扩展

74932020484632208.jpg

调试和前端集成

① 调试

236976151150319480.jpg

② VSCode配置

  1. shellman: 代码提示和自动补全

  2. shellcheck:代码语法校验

  3. shell-format:代码格式化

  4. Bash Debug:支持单步调试

  • 安装vscode插件
  • 编写launch.json文件
  • 升级bash到4.x以上版本

431443280340375595.jpg

③ 前端集成

  1. node中通过exec,spawn调用shell命令

  2. shell脚本中调用node命令

3.借助zx等库进行JavaScript,shell script的融合

19024401102207751.jpg

341626412675147493.jpg

  • 好啦,以上是shell脚本和编程的笔记整理,若内容有疏忽请大家指出,感谢各位小伙伴的阅读~

885497845665783205.jpg