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

50 阅读2分钟

Shell基础概念

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

shell和Bash的关系可以理解成类和实例的关系

命令和语法

变量分为3种类型

类型作用域声明方式规范
自定义变量当前shell=字符串、整形、浮点型、日期型
环境变量当前shell及其子shellexport、declare -x-
系统环境变量所有shell启动加载-
declare [+/-] 变量
选项含义
-给变量设定类型属性
+取消变量的类型属性
-a将变量声明为数组类型
-i将变量声明为整数型
-x将变量声明为环境变量
-r将变量声明为只读变量
-p显式指定变量的被声明的类型

自定义变量

# 变量名=变量值(等号左右不能有空格)
page_size=1
page_num=2

# 将命令复制给变量
_ls=ls

# 将命令结果赋值给变量
file_list=$(ls -a)

# 默认字符串,不会进行 + 运算
total=page_size*page_num

# 声明变量为整型
let total=page_size*page_num

declare -i total=page_size*page_num


# 导出环境变量
export total

declare -x total
变量名含义常见操作
$0当前shell名称/脚本名称$1、$2等可以获取到传入参数
$#传入脚本的参数数量if [$# -g 1]
$*传入脚本的所有参数-
$?上条命令执行的状态码if [ $? -eq 0 ];
$PS1命令提示符export PS1="\u@\h \w> "
$HOME用户主文件夹cd ~
$PATH全局命令的搜索路径PATH=$PATH:[新增路径]

配置文件的加载流程

image.png

在修改配置文件后,要使用source ~/xxx刷新生效

执行过程和原理

  1. shell脚本一般以 .sh 结尾, 也可以没有, 这是一个约定; 第一行需要指定用什么命令解释器来执行 #! /bin/bash #! /usr/bin/env bash
  • 执行过程有5步
  1. 字符解析
    • 识别换行符、 分号(;) 做行的分割
    • 识别命令连接符(|| && 管道) 做命令的分割
    • 识别空格、tab符,做命令和参数的分割
  2. shell 展开, 例如 {1..3} 解析为 1 2 3
  3. 重定向, 将stdin、stdout、stderr的文件描述符进行指向变更
  4. 执行命令
    • builtin 直接执行
    • 非 builtin 使用 $PATH 查找,然后启动子进程执行
  5. 收集状态并返回

调试和前端集成

  • node中通过 exec、spawn 调用 shell 命令
  • shell 脚本中调用 node 命令
  • 借助 zx 等库进行 javascript、 shell script 的融合

image.png

image.png

个人总结

  1. Shell基础概念涉及了很多知识,包括终端、tty、终端模拟器、Shell和Bash
  2. 命令和语法部分介绍了变量的不同类型及其声明方式,以及常见的变量操作和含义
  3. 配置文件的加载流程和执行过程和原理也有详细的解释(对于了解和熟悉使用Linux系统,了解其配置文件的加载是非常有必要的)