价值点:
- Linux服务器基本操作和管理
- 前端Node.js的运维操作
- 编写TCE、SCM、Docker脚本,完成服务编译和部署
概念
- 终端:获取用户输入、展示运算结果的硬件设备
- 终端模拟器:关联虚拟tty的输入输出软件
- tty:teletypewriter的简称,和终端等价,在Linux中是输入输出环境
- shell:命令解释器,处理来自终端模拟器的输入,解释执行后的输出结果给终端
- bash:shell的一种具体体现
变量
| 类型 | 作用域 | 声明方式 | 规范 |
|---|---|---|---|
| 自定义变量 | 当前shell (指的是父进程) | = | 字符串、整型、浮点型、日期型 |
| 环境变量 | 当前及其子shell | export、declare -x | |
| 系统环境变量 | 所有的shell | 启动加载 |
自定义变量
变量名=变量值(等号左右不能有空格) page_size=1
可以把命令如sh或者命令结果如$(ls -a)赋值给变量
默认是字符串类型
变量需要声明是什么类型
导出环境变量 export total 或者declare -x total
declare的一些选项
-是给变量设定类型属性
+是取消类型属性
-a 将变量声明为数组类型
-i 整数型
-x 环境变量
-r 将变量声明为只读变量
-p 显示指定变量的被声明类型
系统环境变量
配置文件加载
登录式:从/etc/profile这个文件开始,然后去加载~/bash_profile然后~/bash_login然后~/.profile接着,去执行~./bashrc和/etc/bashrc
非登录式(又分为交互式和非交互式):~./bashrc然后/etc/bashrc
当我们修改了某个配置文件,想要生效,需要执行一下source ~/.bashrc
反引号``
即使后台运行,关闭shell的时候仍然会关闭,除非搭配nohup 使用
nohup node sever.js & 会一直在后台运行
管道
管道符| ,作用是将前一个命令的结果传递给后面的命令
管道右侧命令必须能接受标准输入才行
比如grep ,不能使用:ls 、mv ,可以用xargs 预处理 再使用ls
管道命令仅处理标准输出,如果有错误也不会退出,使用set -o pipefail设置shell遇到管道错误退出
重定向
标准输入的文件描述符fd0指向终端输入
标准输出的文件描述符fd1指向终端输出
标准错误的文件描述符fd2指向终端输出
输出重定向符号
>覆盖写入文件
>>追加写入文件
2>将错误输出写入文件
&>全部写入文件
输入重定向符
<
<< 遇到某符号的时候停止
判断
test、[ ] 、[[ ]] ,其中中括号前后要有空格,否则会报错,中括号中的变量最好用引号括起来
用于整数(标志位等于-eq小于-lt大于-gt)、字符串(为空-z非空-n 相等=)、文件测试(文件是否存在-e文件是否存在,并且是一个普通文件-f)
分支语句
第一种
if 条件;then
程序段
elif 条件;then
程序段
else
程序段
fi
第二种
case $变量 in:
“第一个变量内容”)
程序段
;;
*)
程序段
;;
esac
循环
函数
函数内的return 仅表示函数执行的状态,不代表函数执行结果
返回结果一般使用echo 或printf
在外面使用$() 和`` 获取结果
如果没有return,函数状态是上一条命令的执行状态,存储在$?里
在函数里使用local 定义变量可以防止污染外部,使用在内部
模块化
指的是在当前的shell中,执行其他的函数文件、方式 source 【函数库路径】
shell常用命令
执行
shell脚本一般以.sh结尾或没有
命令解释器
#! /bin/bash 或者 #! /usr/bin/env bash
启动方式
-
文件名运行
./filename.sh -
解释器运行
bash ./filename.sh -
source运行
source ./filename.sh
执行过程
shell脚本会交给bash解释器去执行
1、字符解析
- 识别换行符、分号--------------(行的分割)
- 命令连接符如(|| && 管道)----------(命令的分割)
- 空格、tab符----------(命令、参数的分割)
2、shell展开 比如,会将{1..3} 解析成 1 2 3
3、进行重定向,将stdin、stdout、stdeer的文件描述符进行指向变更
4、执行命令,内置命令会直接执行,非内置命令会使用$PATH查找,启动子进程进行执行
5、收集状态并返回
调试
1、echo 或者printf
2、set命令
-
-u遇到不存在变量报错,停止执行 -x运行结果前,先输出所执行的那一行的命令
-
-e一旦发生错误,终止执行 -
-o pipefail 管道符连接,一有子命令失败,整个管道命令就失败,脚本就终止执行 -
-o nounset -
-o xtrace -
-o errexit
3、vscode的配置(快捷编码)
- shellman:代码提示和自动补全
- shellcheck:代码语法校验
- shell-format:代码格式化
- Bash Debug:支持单步调试
前端集成
1、node中用exec(会启动子shell进程,有大小限制)、spawn 调用shell命令
2、shell脚本中用node命令
借助zx等库进行JavaScript、shell script的融合