shell 简介

shell是一个运行在linux/UNIX环境下的命令行解释器。是介于操作系统内核和用户之间的一个“中介”,shell通过提供一个交互式的输入输出环境,可以解释和运行用户输入的命令,并将程序的运行结果输出给用户。

在当前的PC和手机上运行应用程序,通过鼠标双击桌面图标,或者点击手机屏幕上的App图标就可以了。而早期的计算机比较昂贵,就和现在的超算一样,一台机器很多人共同使用,而且没有图形交互界面,那用户是如何使用计算机,如何在计算机上跑自己的程序呢?很简单,通过多个终端(一般是键盘和显示器)和计算机连接,不同的用户通过终端,使用各自的账户登录系统,登录系统后,操作系统会给每个登录的用户启动一个shell程序,通过这个交互式的命令行环境,用户就可以输入和运行不同的命令,或者运行指定的脚本。

Bash

shell解释器本身是一个应用程序,shell解释器是UNIX/Linux最重要的应用工具之一,早期的UNIX下默认配置的shell解释器是sh,sh是Bourne Shell的简称,一般位于/usr/bin/sh或/bin/sh目录下。

wit@pc:/# whereis sh
sh: /usr/bin/sh /usr/share/man/man1/sh.1.gz

Bash是目前Linux下使用最广泛的一个shell解释器,Bash是Bourne Again Shell的简称,全称是:GNU Bourne-Again SHell。Bourne shell是由斯蒂芬-波恩编写的UNIX shell,后续随着UNIX、Linux操作系统家族的不断演进和发展,对应的shell版本也随之做了很多改进。

Bash对sh做了很多改进,用户体验比sh提高了不少,目前是很多Linux操作系统默认配置的shell解释器。在Ubuntu-20.04下,我们可以通过查看SHELL变量的值来查看当前使用的shell解释器:

wit@pc:/# echo $SHELL
/bin/bash

其他的shell解释器

除了常用的Bash解释器外,还有一些其他常用的shell解释器:

  • C shell:(/usr/bin/csh)
  • K shell:(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
  • zsh:不兼容Bash,但可以通过其特有的仿真模式(emulation mode)来兼容Bash、csh、ksh的仿真

为什么要学习shell

脚本应用知识对于从事Linux运维、系统管理的工程师来说是必须要掌握的。对从事嵌入式开发、Linux开发的人来说,想要了解系统上电后,系统是如何从内核、用户进程到启动脚本启动各种服务的,掌握shell编程的一些语法和细节是很有必要的,它会帮你了解系统启动的更多细节。

总之,一句话,如果你想精通Linux,无论是系统管理、运维,还是开发,掌握shell编程,是一把利器,会让你后续的学习和工作事半功倍,如虎添翼。

《Linux三剑客》视频教程:Linux下开发工具vim、Git、Makefile、autotools、qemu、debug精讲,从零开始一步一步写项目的Makefile,提供企业级Makefile模板,Git操作实战,vim从新手到高手,一步一步打造类似Source Insight的IDE!详情点击:王利涛老师个人淘宝店:Linux三剑客