shell脚本和编程

75 阅读2分钟

学习shell的价值

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

一、Shell基础概念

1. 概念

  • 终端、终端模拟器、TTY、Shell、Bash

2. 构成

  • 解释器、编程语言

二、语法和命令

1.变量

  • 自定义变量
  • 环境变量
  • 系统环境变量

2.运算符和引用

  • 类型
  • 算数运算符
  • 逻辑运算符
  • 比较运算符
  • 引号
  • 圆括号
  • 命令连接
  • 后台运行

3.管道

管道与管道符|,作用是将前一个命令的结果传递给后面的命令

  • 语法:cmd1 | cmd2
  • 要求:管道右侧的命令必须能接受标准输入才行, 比如 grep 命令, s、mv等不能直接使用,可以使用 xargs 预处理
  • 注意: 管道命令仅仅处理 stdout, 对于 stderr 会予以忽略,可以使用 set-o pipefail 设置 shell 遇到管道错误退出

还有重定向、判断命令、分支语句、循环、函数、模块化、常用命令。

三、执行过程和原理

1.执行

  • shell脚本一般以 .sh 结尾, 也可以没有, 这是一个约定; 第一行需要指定用什么命令解释器来执行
  • 启动方式

2.执行过程

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

四、调试和前端集成

1.调试

  • 普通log,使用 echo、printf
  • 使用 set 命令
  • vscode debug插件

2.VsCode 配置

  1. shellman:代码提示和自动补全
  2. shellcheck:代码语法校验
  3. shell-format:代码格式化
  4. Bash Debug: 支持单步调试

3.前端集成

  1. node中通过 exec、spawn 调用 shell 命令

  2. shell 脚本中调用 node 命令

  3. 借助 zx 等库进行 javascript、shell script 的融合