课程介绍
学习shell的价值
- Linux服务器的基本操作和管理
- 前端Node.js服务的进程管理、问题排查、资源监控等运维操作
- 使用shell编写TCE、SCM、Docker脚本、完成服务编译和部署
Shell基础概念
概念
- 终端:获取用户输入、展示运算结果的硬件设备
- tty:teletypeWriter的简称、和终端等价 早期指电传打印机,在linux中是输入/输出环境。
- 终端模拟器:Mac Terminal、iTerm2等,关联虚拟tty的输入输出软件
- Shell command interpreter 处理来自终端模拟器的输入 解释执行之后输出结果给终端
- Bash shell的一种具体实现
构成
命令和语法
父子Shell
自定义变量
系统环境变量
执行过程和原理
执行流程
1管道
管道与管道符 |作用是将一个命令的结果传递给后面的命令
前一个命令输出的会作为后一个命令的输入
cmd1|cmd2
2重定向
输出重定向符号
输入重定向符号
分支语句
循环
函数
- shell自上而下执行 函数必须使用前定义
- 函数获得变量和shell script类似 1 $2获取
- 函数内return仅仅表示函数执行状态
- 不代表函数执行结果
- 返回结果一般使用echo printf在外面使用$() 获取结果
- 如果没有retun,函数状态是上一条命令的状态 存储在$?中
模块化
原理是在当前shell内执行函数文件 方式: source[函数库的路径]
执行
shell脚本一般以.sh结尾 也可以没有,这是一个约定 ;第一行需要指定用什么命令解释器来执行
#! /bin/bash
#! /user/bin/env bash
执行过程
- 字符解释
- shell展开
- 重定向
- 执行命令
调试和前端集成
- 使用普通log.使用echo printf
- 使用set命令
- vscode debug插件
#! /bin/sh
set -uxe -o pipefail
echo "hello world"
VScode配置
- shellman:代码提示和自动补全
- shellcheck:代码语法校验
- shell-format 代码格式化
- Bash Debug 支持单步调试
前端集成
- node中通过exec. spawn调用shell命令
- shell脚本中调用 node命令
- 借助zx等库进行javascript、shellscript的融合 借助shell完成系统操作 文件io内存 磁盘系统状态查询等 借助node.js完成应用层能力 网络io计算等