什么是 shell, bash, zsh, sh

179 阅读3分钟

什么是shell

计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序

image.png

shell主要分两大类:

图形shell

Graphical User Interface shell 即 GUI shell

  • Windows Explorer
  • Linux shell
    • X Window Manager(BlackBox和FluxBox)
  • CDE
  • GNOME
  • KDE
  • Xfce

命令行式shell

Command Line Interface shell ,即CLI shell。

  • sh / csh / tcsh / bash / ksh / zsh / fish 等(Unix及类unix)
  • COMMAND.COM
  • cmd.exe / 命令提示符
  • Windows PowerShell
  • GCOS Command Language (GCL)
  • MULTICS Command Language(MULTICS)
  • DIGITAL Command Language(DCL)
  • RDOS/DOS Command Line Interpreter

接下来,重点聊一下,命令行式shell中的Unix shell:

Unix shell 的类型:
  • Z-shell(zsh)

Zsh(Z-shell)是一款用于交互式使用的shell,也可以作为脚本解释器来使用。其包含了 bash,ksh,tcsh 等其他shell中许多优秀功能,也拥有诸多自身特色。Zsh构建在bash之上,因此它具有其他特性。Zsh是macOS和Kali Linux的默认shell。Zsh通过提供各种特性(如插件支持、更好的定制、主题支持、拼写纠正等)为用户提供了更大的灵活性。从 macOS Catalina 版开始,其默认shell从bash改为zsh。

  • Bourne shell(sh)

Bourne shell 是一个交换式的命令解释器和命令编程语言。 Bourne shell可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。

  • Korn shell(ksh)

有很长一段时间,只有两类shell供人们选择——Bourne shell用来编程,csh用来交互。为了改变这种状况,AT&T贝尔实验室的David Korn开发了ksh。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,ksh广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。ksh是一个交互式的命令解释器和命令编程语言。它符合POSIX——一个操作系统的国际标准。POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。

  • Bourne Again shell(bash)

bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux。大多数的Linux(Red Hat、Slackware、Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。

  • POSIX shell(sh)

POSIX shell是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0,POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh

  • C shell(csh)

csh 主要是为了让用户更容易地使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格它新增了命令历史、别名、文件名替换、作业控制等功能。

bash 和 zsh 的区别:

image.png

shell常用命令

image.png

image.png

image.png