Bash和shell

一、相关概念
1、什么是shell,什么是bash?

管理计算机硬件的其实是内核,用户正是通过shell来跟内核通信的,从本质上说shell是一个能执行各种命令的宏处理器。而bash(/bin/bash)就是linux默认的shell。

2、什么是子shell?

子shell就是从当前shell环境中新开了一个shell环境。子shell和父shell的关系就是子进程和父进程的关系。子shell可以从父shell中继承很多环境,如变量、命令全路径、文件描述符、当前工作目录、陷阱等等。

3、子shell如何产生?(https://www.linuxidc.com/Linux/2017-08/146606.htm)

Linux上创建子进程的方式有三种:一种是fork出来的进程,一种是exec出来的进程,一种是clone出来的进程。(先不讨论clone)
(1).fork是复制进程,它会复制当前进程的副本(不考虑写时复制的模式),以适当的方式将这些资源交给子进程。
(2).exec是加载另一个应用程序,替代当前运行的进程,也就是说在不创建新进程的情况下加载一个新程序。exec还有一个动作:在进程执行完毕后,退出exec所在的shell环境。为了进程安全,如要形成新的且独立的子进程,都会fork一份当前进程,然后在fork出来的子进程上调用exec来加载新的程序。

4、如何判断是否进入了子shell?

执行

[root@myp ~]# echo "$BASHPID"
6371

如果输出结果和父进程中的pid值不同则就是进入了子shell.

5、进入子shell中的情况
  1. 执行bash内置命令时
  2. 执行脚本文件时
  3. 执行bash命令时
  4. 执行shell函数时(直接执行时不会进入子shell但是放入管道中会进入子shell)
  5. 执行非bash内置命令时
  6. 命令替换
  7. 使用括号()组合一系列命令
  8. 放入后台运行的命令
  9. 进程替换
二、shell执行命令的过程
  1. 从终端或者shell脚本或者 bash -c "STR"中读取命令
  2. 将命令拆分成单词和运算符
  3. 将符号解析成简单或者复杂的命令
  4. 进行各种sh+ell扩展
  5. 重定向
  6. 执行命令
  7. 等待命令解释,收集结束转态
<think>首先,用户的问题是:“我想理解bashshell之间的关系 请问bashshell区别与联系”。这基于系统级指令,我需要使用中文回答,并确保LaTeX格式正确。 系统级指令要求: - 所有行内数学表达式用$...$格式。 - 独立公式用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 用户可见层要求: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 参考的站内引用: - [^1]: Shell Bash 是一家人,但真的不一样:深入理解 Bash Shell区别与联系。 - [^2]: Bash ShellBash 是一种具体的 Shell 实现。Shell 是广义概念,Bash 是其中一种。 - [^3]: Linux基础篇(一)-- ShellBash区别联系。Bash 是大多数 Linux 系统的缺省 Shell。 - [^4]: CSH 入门基础 4 番外篇 -- bash shell区别shell 种类介绍。/bin/bash 包含高级功能。 我需要基于这些引用构建回答,但确保回答真实可靠。这些引用强调了Shell是命令行解释器的总称,而BashShell的一种具体实现。 结构化回答: 1. **介绍ShellBash的基本概念**:解释什么是Shell,什么是Bash。 2. **区别**:明确ShellBash的不同点。 3. **联系**:解释它们之间的关系。 4. **实际应用**:如何查看当前使用的Shell或切换Shell。 5. **生成相关问题**:在末尾添加相关问题。 确保回答清晰、逐步: - 步骤1: 定义Shell。 - 步骤2: 定义Bash。 - 步骤3: 比较区别。 - 步骤4: 说明联系。 - 步骤5: 实用信息。 引用标识:在回答中引用段落时,在末尾添加引用标识,如[^1]。基于提供的引用,我需要自然地融入它们。 生成相关问题:在回答末尾,添加§§相关问题§§部分。 数学表达式:用户的问题是关于计算机概念,可能不涉及数学,但如果有数学相关部分,确保格式正确。例如,如果提到变量,用$...$。但这里可能不需要,除非有具体例子。 完整回答结构: - 开头:回应问题。 - 主体:分步骤解释。 - 结尾:总结。 - 相关问题。 最终输出: - 回答部分。 - §§相关问题§§部分。</think>### Bash Shell区别与联系 在 Linux Unix 系统中,Shell Bash 是经常被混淆的概念。理解它们的区别与联系,有助于更高效地使用命令行工具。下面我将逐步解释,确保回答基于可靠的技术知识(参考了相关引用资料)。 #### 步骤 1: 什么是 ShellShell 是一个**命令行解释器**(或称为“壳层”),它是用户与操作系统内核之间的桥梁。Shell 的主要功能包括: - 解释执行用户输入的命令。 - 提供脚本编程能力,支持自动化任务。 - 管理进程、文件系统环境变量。 Shell 不是单一实体,而是一个**广义概念**,有多种实现类型。常见的 Shell 类型包括: - Bourne Shell (sh):最原始的 Shell,常用于系统脚本。 - C Shell (csh):支持类 C 语法。 - Korn Shell (ksh):结合了 sh csh 的优点。 - Z Shell (zsh):提供高级交互功能,如自动补全。 - Fish:专注于用户友好性。 Shell 的核心作用是提供一个统一接口,让用户控制操作系统[^1]。 #### 步骤 2: 什么是 BashBash(Bourne Again Shell)是 Shell 的一种**具体实现**。它由 Brian Fox 在 1989 年开发,作为 Bourne Shell (sh) 的增强版。Bash 的特点包括: - **高级功能**:支持命令行编辑、命令历史记录、命令别名脚本调试。 - **兼容性**:继承了 sh 的语法,同时添加了 csh ksh 的特性。 - **广泛性**:在大多数 Linux 发行版(如 Ubuntu、CentOS)中是默认 Shell,也被 macOS Windows Subsystem for Linux (WSL) 采用。 Bash 的优势在于其强大性易用性,例如可以通过 `history` 命令查看历史命令,或使用 `alias` 创建快捷方式[^2][^3]。 #### 步骤 3: Shell Bash区别 Shell Bash 的主要区别在于**抽象层次**: - **Shell 是概念**:它是一个通用术语,指代所有命令行解释器。Shell 可以是文本基础的(如 Bash),也可以是图形化的(如 GUI Shell)。其他常见实现包括 Zsh Fish[^2]。 - **Bash 是具体实现**:它是 Shell 家族中的一个成员。Bash 提供了比原始 Shell 更丰富的功能,例如: - 命令历史(例如,按 `↑` 键查看历史)。 - 扩展的脚本语法(如支持数组条件表达式)。 - **功能差异**:在 Linux 系统中,`/bin/sh` 通常是一个符号链接指向基本 Shell(如 dash),它只支持有限功能;而 `/bin/bash` 包含高级特性如命令行编辑别名[^4]。 简单来说,Shell 是“类别”,Bash 是“具体产品”。就像“汽车”是类别,“丰田汽车”是具体品牌一样。 #### 步骤 4: Shell Bash 的联系 Shell Bash 的联系紧密,体现为: - **继承关系**:BashShell 的衍生版本,它基于 Bourne Shell (sh) 构建,并融合了其他 Shell 的优点。因此,所有 Bash 命令都兼容 Shell 的基本语法。 - **日常使用**:在多数场景中,用户通过 BashShell 交互。例如,当你在终端输入命令时,很可能正在使用 Bash。 - **实际应用**:在 Linux 系统中,Bash 作为默认 Shell,为用户提供了统一的入口。你可以通过命令查看当前 Shell: ```bash echo $SHELL # 输出当前 Shell 路径,如 /bin/bash ``` 如果需要切换 Shell(例如改用 Zsh),可以使用: ```bash chsh -s /bin/zsh # 切换后需重新登录 ``` 这体现了 Shell 的多样性,而 Bash 只是其中一种流行选择[^1][^3]。 #### 总结 Shell 是命令行解释器的总称,而 BashShell 的一种具体实现,提供增强功能。在大多数 Linux 环境中,Bash 是默认 Shell,但其他选项如 Zsh 也广泛使用。理解这一点,能帮助你更灵活地选择工具或编写脚本[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值