【Linux】Shell 和 Bash

Posted by 西维蜀黍 on 2020-06-13, Last Modified on 2022-04-01

Unix shell

Unix shell,一种壳层与命令行界面,是UNIX操作系统下传统的用户和计算机的交互界面。第一个用户直接输入命令来执行各种各样的任务。

普通意义上的shell就是可以接受用户输入命令的程序。它之所以被称作shell是因为它隐藏了操作系统低层的细节。同样的Unix下的图形用户界面GNOME和KDE,有时也被叫做“虚拟shell”或“图形shell”。


这是基本的一个输出声音所需要的步骤!

也就是说,你必须要『输入』一个命令之后, 『硬件』才会透过你下达的命令来工作!那么硬件如何知道你下达的命令呢?那就是 kernel (核心) 的控制工作了!也就是说,我们必须要透过『 Shell 』将我们输入的命令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作! 基本上,我们可以透过底下这张图来说明一下:

各种Unix shell

第一个Unix shell是由肯·汤普逊,仿效Multics上的shell所实现出来,称为sh。

由于早年的 Unix 年代,发展者众,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头默认的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为『 Bourne Again SHell (简称 bash) 』,这个 Shell 是 Bourne Shell 的增强版本,也是基准于 GNU 的架构下发展出来的呦!

迭代关系:

Bourne shell兼容

  • Bourne shell(sh)史蒂夫·伯恩在贝尔实验室时编写。1978年随Version 7 Unix首次发布。
    • Almquist shell(ash)
    • Bourne-Again shell(bash)
    • Debian Almquist shell(dash)
    • Korn shell(ksh)David Korn在贝尔实验室时编写。
    • Z shell(zsh)

C shell兼容

  • C shell(csh)比尔·乔伊在加州大学伯克利分校时编写。1979年随BSD首次发布

那么目前我们的 Linux 有多少我们可以使用的 shells 呢? 你可以检查一下 /etc/shells 这个文件,至少就有底下这几个可以用的 shells:

  • /bin/sh (已经被 /bin/bash 所取代)

  • /bin/bash (就是 Linux 默认的 shell)

  • /bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的,兼容于 bash)

  • /bin/tcsh (整合 C Shell ,提供更多的功能)

  • /bin/csh (已经被 /bin/tcsh 所取代)

  • /bin/zsh (基于 ksh 发展出来的,功能更强大的 shell)

Bash

Bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell。

Bash是Bourne shell的后继兼容版本与开放源代码版本,它的名称来自Bourne shell(sh)的一个双关语(Bourne again / born again):Bourne-Again SHell。

Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。和其他Unix shell 一样,它支持文件名替换(通配符匹配)、管道、here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。包括关键字、语法在内的基本特性全部是从sh借鉴过来的。其他特性,例如历史命令,是从csh和ksh借鉴而来。总的来说,Bash虽然是一个满足POSIX规范的shell,但有很多扩展。

Reference