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

54 阅读3分钟

shell脚本和编程

shell基础概念

概念

  1. 终端:获取用户输入、展示运算结果的硬件设备
  2. 终端模拟器:mac terminal、iterm2等,关联虚拟tty的输入输出软件
  3. tty:teletypeWriter的简称,和终端等价,早期指带脑传印机,在linux中是输入输出环境
  4. shell:command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给终端
  5. bash:shell的一种具体实现

发展

  1. ken Thompson(来自贝尔实验室)在1971年为UNIX开发了第一个shell,称为V6 shell
  2. Stephen Bourne在贝尔实验室为V7 UNIX所挨罚的Brourne shell,即sh
  3. 开源组织GNU为了取代Bourne shell开发的Bourne-Again shell,即Bash

构成

shell主要是分为了解释器与编程语言,解释器主要分为了bash内置命令、GNU核心工具集、第三方库,编程语言主要是分为了变量、运算、语句和函数。具体的构成如下图所示。 image.png

语法和命令

变量分为了自定义变量、环境变量和系统环境变量。其中自定义变量的作用域是当前shell,环境变量的作用域是当前shell及其子shell,系统环境变量的作用域是所有shell。它们的声明方式分别是“=”、“export、declare -x”、“启动加载”。自定义变量还有一个规范是注意字符串、整型、浮点型、日期型

以下还有父子shell的示意图

image.png

自定义变量

  1. 变量名=变量值(等号左右不能有空格)
  2. 将命令复制给变量
  3. 将命令结果复制给变量
  4. 默认字符串,不会进行+运算
  5. 声明变量为整型
  6. 导出环境变量

系统环境变量

主要是分为了以下的几个,并解释出相对应的含义和它们的常规操作。 image.png

配置文件加载

首先是进入至shell,然后进入至配置文件加载 image.png 运算符和引用

  • 主要的运算符主要是分为了算数运算符、逻辑运算符和比较运算符
  • 引用主要是分为了引号、圆括号、命令连接和后台运行

具体使用的符号,还有它们的具体作用和具体的用法如下图所示。 image.png 管道

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

重定向

重定向分为了三个类:标准输入、标准输出、标准错误。交互式shell分为的是终端输入、终端输出。 输出重定向符号和输入重定向符号有具体的使用

判断命令 shell中提供了三种判断符号,可用于:整数测试、字符串测试和文件测试

执行过程和原理

主要是分为了五个方面:1.字符解析、2.shell展开,例如{1..3}解析为1 2 3、3.重定向,将stdin、stdout、stderr的文件描述进行指向变更、4.执行命令、5.手机状态并返回 image.png

调试和前端集成

调试分为了三个步骤

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