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

49 阅读2分钟

Shell脚本和编程

课程介绍

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

个人认为shell语言有计算机语言本身的美感,且可以极大提高工作效率

  1. 课前准备
  • 一台linux系统的电脑

我这里是在笔记本上安装了win11+ubuntu双系统

  • 安装本地vscode, Bash Debug(>4.x)
  • Npm全局安装zx依赖

①Shell基础概念

  1. 概念

终端:获取用户输入,展示运算结果的硬件设备
tty:teletypeWriter
终端模拟器:Mac Terminal、iTerm2
Shell:command interpreter处理来自终端模拟器的输入,解释执行后输出结果给终端 >Bash:shell的具体实现

  1. 发展

Shell发展历史.png

  1. 构成

shell构成.png

②语法和命令

1. 变量

shell变量 .png

(父子shell) 父子shell.png

自定义变量(父进程)
环境变量(父进程、子进程)

(1)自定义变量

# 变量名=变量值 (等号左右不能有空格)
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

shell自定义变量.png

(2)系统环境变量

系统环境变量.png

2.配置文件加载

配置文件.png

  • 登陆式shell
  • 交互式shell
// 修改配置文件后,想要使其生效
source ~/.bashrc

3.运算符和引用

运算符.png

4.管道

管道与管道符|,作用是将前一个变量的结果传递给后面的变量
语法: cmd1 | cmd2

要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以使用xargs预处理

xargs就是将标准输入转换成参数列表传递出去

注意:管道命令仅仅处理stdout(标准输出),对于stderr(管道错误输出)会忽略

可以使用set -o pipefail 设置shell遇到管道错误退出

5.重定向

重定向0.png 重定向1.png

6.判断命令

判断.png

举个例子:

例子1.png

7.分支语句

分支语句.png

8.循环

(1)while循环

image.png image.png

(2)until循环

image.png image.png

(3)for循环

image.png image.png

8.函数

(1)语法一 image.png image.png

(2)语法二 image.png image.png

注意:

image.png

9.模块化

模块化的原理是在当前shell内执行函数文件 source [函数库的路径]

image.png

10.常用命令

image.png

③执行过程和原理

1.执行

image.png

2.执行过程

image.png

3.shell展开

(1)大括号展开 {...}

一般由三部分构成:前缀,一对大括号,后缀

大括号内可以是逗号分割的字符串序列,
也可以是序列表达式

image.png

(2)波浪号展开 ~

image.png

(3)参数展开 ${}

image.png

(4)命令替换

image.png

(5)数学计算 $((...))

image.png

(6)文件名展开 * ? [..] 外壳文件名模式匹配

image.png

④调试与前端集成

1.调试

  • 普通log,使用echo、printf

image.png

  • 使用set命令

image.png

  • 使用vscode debug插件

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

  2. shellcheck 代码语法校验

  3. shell-format 代码格式化

  4. Bash Debug 支持单步调试

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

2.集成

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

  • shell脚本中调用node命令

  • 借助zx等库惊醒js,shell script的融合

借助shell完成系统操作,文件io,内存,磁盘系统状态查询等
借助node.js完成应用层能力,网络io、计算等