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编程,是一把利器,会让你后续的学习和工作事半功倍,如虎添翼。