3-Shell脚本和编程
一、准备
- 安装linux物理机或云主机,可运行shell脚本
- 本地vscode安装Bash Debug插件。升级到4.x以上
- Npm全局安装zx依赖
二、知识
(一)Shell基础概念
-
Shell
- 解释器:bash内置命令、GNU核心工具集、第三方库
- 编程语言:变量、运算、语句、函数
-
一些代码
- local 来定义变量:避免污染外部作用域
- unset:或者用unset来撤销变量,同上
- 模块化:source [函数库路径]
(二)执行过程和原理
-
shell脚本一般以.sh结尾
-
第一行指定用什么命令解释器执行
- #! /bin/bash
- #! /usr/bin/env bash
-
启动方式
- 文件名运行:./filename.sh
- 解释器运行:bash ./filename.sh
- source 运行:source .filename.sh
-
执行过程
-
字符解析
- 识别换行符、分号做行的分割
- 识别命令连接符做命令的分割
- 识别空格、tab符,做命令和参数的分割
-
shell展开
-
重定向
-
执行命令
-
收集结果返回
-
-
shell展开
-
大括号展开:前缀、大括号、后缀
- a{b,c}d ——》abd,acd
- {1...5}——》1,2,3,4,5
- {1...5...2}——》1,3,5
- {a...e}——》a,b,c,d,e
-
波浪号展开
- 当前用户主目录:~ ——》$HOME
- 当前用户主目录:~/foo ——》$HOME/foo
- 指定用户主目录:~fred/foo——》用户fred的 $HOME/foo
- 当前工作目录:~+/foo——》 $PWD/foo
- 上一个工作目录:~ -/foo——》${SOLPWD-'~-'}/foo
-
参数展开
-
间接参数扩展:${!parameter}
-
参数长度:${#parameter}
-
空参数处理
- ${parameter:-word}:为空替换
- parameter变量
- ${parameter:?word}:为空报错
- ${parameter:+word}:不为空替换
-
参数切片
- ${parameter:offset}
- ${parameter:offset:length}
-
参数部分删除
- ${parameter%word} 最小限度从后面截取word
- ${parameter%%word} 最大限度从后面截取word
- ${parameter#word} 最小限度从前面截取word
- ${parameter##word} 最大限度从前面截取word、
- 2替换
-
$()
-
``
-
-
数学计算:$(())
-
文件名展开:*?[...]外壳文件名模式匹配kopu754321`
-
(三)调试和前端集成
-
调试
-
普通log——打印相应结果
- echo
-
set
- -u 遇到不存在的变量会报错,停止执行
- -x 运行结果之前,先输出执行的那一行命令
- -e 只要发生错误,就终止执行
- -o pipefail 管道符链接的,只要一个子命令失败,整个关岛命令就失败,脚本就会终止执行
-
vscode debug
-
shellman:代码提示和自动不全
-
shellcheck:代码语法校验
-
shell-format:代码格式化
-
Bash Debug:支持单步调试
- 安装vscode插件
- 编写lauch.json文件
- 升级bash到4.x以上版本
-
-
-
前端集成
- node中通过exec、spawn调用shell命令
- shell脚本中调用node命令
- 借助zx等库进行javascript、shell script的融合