shell脚本和编程
shell基础概念
概念
- 终端:获取用户输入、展示运算结果的硬件设备
- 终端模拟器:mac terminal、iterm2等,关联虚拟tty的输入输出软件
- tty:teletypeWriter的简称,和终端等价,早期指带脑传印机,在linux中是输入输出环境
- shell:command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给终端
- bash:shell的一种具体实现
发展
- ken Thompson(来自贝尔实验室)在1971年为UNIX开发了第一个shell,称为V6 shell
- Stephen Bourne在贝尔实验室为V7 UNIX所挨罚的Brourne shell,即sh
- 开源组织GNU为了取代Bourne shell开发的Bourne-Again shell,即Bash
构成
shell主要是分为了解释器与编程语言,解释器主要分为了bash内置命令、GNU核心工具集、第三方库,编程语言主要是分为了变量、运算、语句和函数。具体的构成如下图所示。
语法和命令
变量分为了自定义变量、环境变量和系统环境变量。其中自定义变量的作用域是当前shell,环境变量的作用域是当前shell及其子shell,系统环境变量的作用域是所有shell。它们的声明方式分别是“=”、“export、declare -x”、“启动加载”。自定义变量还有一个规范是注意字符串、整型、浮点型、日期型
以下还有父子shell的示意图
自定义变量
- 变量名=变量值(等号左右不能有空格)
- 将命令复制给变量
- 将命令结果复制给变量
- 默认字符串,不会进行+运算
- 声明变量为整型
- 导出环境变量
系统环境变量
主要是分为了以下的几个,并解释出相对应的含义和它们的常规操作。
配置文件加载
首先是进入至shell,然后进入至配置文件加载
运算符和引用
- 主要的运算符主要是分为了算数运算符、逻辑运算符和比较运算符
- 引用主要是分为了引号、圆括号、命令连接和后台运行
具体使用的符号,还有它们的具体作用和具体的用法如下图所示。
管道
- 管道与管道符|,作用是将前一个命令的结果传递给后面的命令
- 语法: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.手机状态并返回
调试和前端集成
调试分为了三个步骤
- 普通log,使用echo、printf
- 使用set命令
- vscode debug插件