Shell脚本和编程
课程介绍
- 学习shell的价值
- Linux服务器的基本操作和管理
- 前端Node.js服务的进程管理、问题排查、资源监控等运维操作
- 使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署
个人认为shell语言有计算机语言本身的美感,且可以极大提高工作效率
- 课前准备
- 一台linux系统的电脑
我这里是在笔记本上安装了win11+ubuntu双系统
- 安装本地vscode, Bash Debug(>4.x)
- Npm全局安装zx依赖
①Shell基础概念
- 概念
终端:获取用户输入,展示运算结果的硬件设备
tty:teletypeWriter
终端模拟器:Mac Terminal、iTerm2
Shell:command interpreter处理来自终端模拟器的输入,解释执行后输出结果给终端 >Bash:shell的具体实现
- 发展
- 构成
②语法和命令
1. 变量
(父子shell)
自定义变量(父进程)
环境变量(父进程、子进程)
(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
(2)系统环境变量
2.配置文件加载
- 登陆式shell
- 交互式shell
// 修改配置文件后,想要使其生效
source ~/.bashrc
3.运算符和引用
4.管道
管道与管道符|,作用是将前一个变量的结果传递给后面的变量
语法: cmd1 | cmd2
要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以使用xargs预处理
xargs就是将标准输入转换成参数列表传递出去
注意:管道命令仅仅处理stdout(标准输出),对于stderr(管道错误输出)会忽略
可以使用set -o pipefail 设置shell遇到管道错误退出
5.重定向
6.判断命令
举个例子:
7.分支语句
8.循环
(1)while循环
(2)until循环
(3)for循环
8.函数
(1)语法一
(2)语法二
注意:
9.模块化
模块化的原理是在当前shell内执行函数文件 source [函数库的路径]
10.常用命令
③执行过程和原理
1.执行
2.执行过程
3.shell展开
(1)大括号展开 {...}
一般由三部分构成:前缀,一对大括号,后缀
大括号内可以是逗号分割的字符串序列,
也可以是序列表达式
(2)波浪号展开 ~
(3)参数展开 ${}
(4)命令替换
(5)数学计算 $((...))
(6)文件名展开 * ? [..] 外壳文件名模式匹配
④调试与前端集成
1.调试
- 普通log,使用echo、printf
- 使用set命令
使用vscode debug插件
shellman 代码提示和自动补全
shellcheck 代码语法校验
shell-format 代码格式化
Bash Debug 支持单步调试
安装vscode插件
编写launch.json
升级bash到4.x以上版本
2.集成
node中通过exec,spawn调用shell命令
shell脚本中调用node命令
借助zx等库惊醒js,shell script的融合
借助shell完成系统操作,文件io,内存,磁盘系统状态查询等
借助node.js完成应用层能力,网络io、计算等