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

23 阅读2分钟

课程介绍

学习 shell 的价值:

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

1. Shell 基础概念

概念

名称解释
终端获取用户输入、展示运算结果的硬件设备
ttyteletypeWriter的简称,和终端等价,早期指电传印机,在linux中是输入/输出环境
终端模拟器Mac Terminal、 iTerm2等,关联虚拟tty的输入输出软件
Shellcommand interpreter, 处理来自终端模拟器的输入,解释执行之后输出结果给终端
Bashshell的一种具体实现

构成

image.png

2. 命令和语法

类型作用域声明方式规范
自定义变量当前shell=字符串、整型、浮点型、日期型
环境变量当前shell及其子shellexport、declare -x
系统环境变量所有shell启动加载

父子shell

image.png

自定义变量

image.png

3. 执行过程和原理

执行

  1. shell脚本一般以 .sh 结尾,也可以没有,这是一个约定:第一行需要指定用什么命令解释器来执行
1 #! /bin/bash

1 #! /usr/bin/env bash
  1. 启动方式
1 '# 文件名运行
2 ./filename.sh
3
4
5 # 解释器运行
6 bash ./filename.sh
7
8
9 # source 运行
10 source ./filename.sh

执行过程

  1. 字符解析
    • 识别换行符、 分号(:) 做行的分割
    • 识别命令连接符(|| && 管道) 做命令的分割
    • 识别空格、tab符,做命令和参数的分割
  2. shell 展开,例如 {1..3] 解析为 1 2 3
  3. 重定向,将stdin、stdout、stderr的文件描述符进行指向变更
  4. 执行命令
    • builtin 直接执行
    • 非 builtin 使用 SPATH 查找,然后启动子进程执行 5.收集状态并返回

shell展开

  1. 大括号展开 (Brace Expansion) {...}
  2. 波浪号展开 (Tilde Expansion) ~
  3. 参数展开 (Shell Parameter Expansion)
  4. 命令替换 (Command Substitution)
  5. 数学计算 (Arithmetic Expansion) $((..))
  6. 文件名展开 (Filename Expansion) * ? [..] 外壳文件名模式匹配

4. 调试和前端集成

调试

  1. 普通log,使用 echo、printf
  2. 使用 set 命令
  3. vscode debug插件

VSCode配置

  1. shellman:代码提示和自动补全
  2. shellcheck:代码语法校验
  3. shell-format:代码格式化
  4. Bash Debug:支持单步调试
    • 安装 scode 插件
    • 编写 launch.json文件
    • 升级 bash 到 4.x 以上版本

前端集成

  1. node中通过 exec、spawn 调用 shell 命令
  2. shell 脚本中调用 node 命令
  3. 借助 zx 等库进行javascript、shell script 的融合
    • 借助 shell 完成系统操作,文件io 内存、磁盘系统状态查询等
    • 借助 nodeis 完成应用层能力,网络io、计算等

课程总结

image.png