Shell基础概念
概念
- 终端:获取用户输入、展示运算结果的硬件设备
- tty(teletypewriter):输入输出环境,和终端等价
- 终端模拟器:Terminal,关联虚拟tty的输入输出软件
- Shell:处理来自终端模拟器的输入,解释之后输出结果给终端
- Bash:Shell的一种具体实现
构成
语法和命令
配置文件加载
- 登录式
- 非登录式
- 交互式:等待用户输入指令
- 非交互式:直接执行
运算符和引用
管道
“|”,将前一个命令的结果传递给后面一个命令
重定向
本来fd0指向终端输入,fd1、fd2指向终端输出,现在通过重定向符号操作使它们指向了不同其他的文件。
- ‘>’:覆盖写入文件
- ‘>>’:追加写入文件
- ‘2>’:错误输出写入文件
- ‘&>’:正确和错误输出统一写入到文件中
判断命令
常用命令
执行过程和原理
创建Shell脚本
#! /bin/bash
#! /usr/bin/env bash
启动方式
文件名运行:./filename.sh
解释器运行:bash ./filename.sh
source运行: source ./filename.sh
执行过程
- 绿色部分为Shell脚本,启动之后交给bash解释器执行。
- 蓝色部分为bash解释器内部阶段,首先是字符解析,识别脚本的换行符、分号做基本的行的分割,然后识别命令连接符(& || 管道)做命令的分割,最后识别空格、tab做命令和参数的分割。
- Shell展开
-
{}展开:可以是逗号分隔的字符串序列和序列表达式
-
~展开
-
参数展开
-
命令替换 $(...)/'...':在子进程中执行命令并用得到的结果替换包裹的内容
-
数学计算 $((...))
-
文件名展开 *?[..]
-
- 重定向
- 执行命令
- 内置命令直接执行
- 非内置命令用$PATH查找,然后启动子进程执行
- 收集状态并返回给用户脚本
调试Shell脚本和前端集成
-
echo、printf来打印
-
set命令
-
vscode debug插件