00:00
接下来我们要介绍的呢,是Linux学习中非常重要的一个扩展,那就是所谓的shell编程啊,其实关于shell这一个概念,我们之前的学习过程当中已经反反复复的接触到了,呃,之前我们介绍的各种各样的Linux命令,它其实就是执行在我们当前shell的命令行控制台里面的,哎,所以我们其实之前已经了解过shell的用法了,所以接下来呢,我们还是重新的再来回顾一下基本概念,来深刻的理解一下shell到底是什么。我们可以借助这个非常经典的图再来回顾一下shell的概念啊,那首先我们知道计算机系统最底层当然都是一些硬件了,CPU、内存、IO、设备,那我们本质上进行编程,进行操作的这个过程,本质上最后都要翻译成对于硬件的操作指令。那真正能够操作硬件的是什么呢?当然就是操作系统了,操作系统的核心部分,诶,就我们当时这个李纳斯大神啊,发布的那个Linux版本,其实就是所谓的kel Linux内核,这就是我们整个操作系统的最核心的部分,直接可以去操作硬件。
01:13
但是我们知道这个内核呢,它对于用户肯定就没那么友好了啊,那一般情况我们用户使用的是什么呢?是最外边的一些外层应用程序,包括文本编辑器啊,浏览器啊,数据库啊,那以及一些图形化的桌面啊,像我们所说的这个。能够显示图形化的界面,都是属于这里的外层应用程序啊,他也可以认为是操作系统的一部分,但是这就偏外层了。所以我们会发现啊,外层的应用程序,用户是可以直接去做操作的,我们可以在这个桌面里边去点点点,但是用户的这个操作,Linux内核可以直接理解吗?它其实是没有办法直接理解的啊,比如说我们这里边啊,在这个桌面上有一个文件夹,我这里直接双击点进去,想要查看这里边的东西。
02:03
那这个操作Linux内核完全不可以理解。甚至我们会想到它这个底层,这不相当于就是一个LS命令吗?甚至连这个LS命令。Linux内核也是没有办法理解的,因为它能理解的就是什么呢?就是对。计算机底层的硬件,CPU要做什么操作,内存要做什么操作,这才是它真正能够理解的东西。所以我们会发现啊,他们两者之间。语言不通,哎,那我们其实是需要有一个翻译关来连接他们之间,给他们搭起一个交流的桥梁的,诶,那到底谁来起到这个翻译官的作用呢?哎,那中间我们就会有一个解释层,这就是所谓的shallll shallll,我们知道这个词本身是有外壳的意思。哎,那这里的这个外壳呢,就相当于是我们包在内核外边的一个壳,它是我们底层操作系统核心跟外部应用的一个接口,有了它我们就可以进行翻译,进行解释,把我们外部操作的一些命令解释成内核可以执行的指令。
03:07
啊,所以本质上来讲,我们得得出结论,Shell就是一个命令行的解释器,而且我们知道这个LL给我们提供了一个交互式的。文本命令行的界面控制台啊,我们就打开那个控制台之后啊,也可以远程连接,直接一行一行输命令就可以了,Shell终端控制台接收到命令之后,就会对它进行各种各样的解释,然后调用相应的程序,然后就会向。操作系统的内核发起请求,交给操作系统的内核进行执行啊,所以整个这个过程当中,它起到的作用就是一个连接的桥梁,一个翻译官的作用,所以我们大部分情况下啊,如果想要在Linux系统上执行操作的话,其实我们会发现都是基于shell啊,当然了,外边如果我们使用应用程序的话,本质上也是通过shell翻译过去。
04:03
所以我们会发现啊,用户一般情况就可以使用这个shell,我们打开那个命令行,然后一行一行的输入命令,那输入一行就会直接解释一行,然后就会由操作系统内核去执行一句,其实我们知道啊,在Linux系统里边,不光我们可以在控制台一句一句的执行,也可以把很多命令串起来,直接写入到一个文件里面。然后呢,我们直接把这个文件交给Linux系统,让他直接去进行执行啊,当然最后我们也是交给了这个shell啊,直接去进行执行,那这样的可执行文件,它其实也是一行一行去做解释,然后执行的,我们就可以把它叫做脚本。诶,那平常我们经常说啊,一些脚本语言脚本编程。所说的就是这样的一种方式,它里边本质上就是一行一行解释执行的。啊,那所以既然这么说了,我们就会想到,那shell就不仅仅只是有一堆命令可以在控制台一行一行去输入,它可以去撰写比较复杂的流程,写成脚本文件,甚至呢,呃,还有各种各样的语法定义,我们可以进行各种复杂的流程控制,那我们就会看到这就像一门编程语言一样啊,所以接下来我们要学习的这部分扩展呢,就是把shell可以当成一个功能强大的编程语言去进行系统性的学习啊,所以它作为一个编程语言呢,一边写一调试,而且灵活性非常的强,诶,那我们知道,如果你做Linux啊,如果是去做运维的话,那运维工程师肯定经常需要做这个服务器的管理,那就总是要去编写shell脚本进行管理和维护的啊,那如果说你是只是一个普通的开发人员的话,那有时候我们也往往面对着要去维护服务器,或者说管理数据库的一些需求啊,比如。
05:56
比方说我们定时的往一个数据库里边可能要去备份数据,写入数据,诶那你想这个数据库它一般情况下肯定都是放在服务器上的嘛,服务器的操作系统都是Linux,那这个时候我们是不是就必须得了解在Linux上进行shell编程,执行一些定时化操作的这样一个流程啊,当然了,我们会讲到之前我们讲过这个,呃,C ta嘛,我们可以用这个links基本的一些命令啊,定时命令去做操作,那如果流程更复杂的话,那显然单独的命令就搞不定了,我们需要去写脚本。
06:32
啊,那对于大数据的应用场景而言更是这样啊,因为我们知道大数据场景下集器比较多,诶,他们构成了一个集群,我们如果要对集群进行管理,肯定往往也是需要去。写脚本进行维护的啊,所以shell这个编程啊,在实际应用过程当中还是非常有用的。那其实我们知道对于Linux而言啊,它的shell本身是有多种多样的实现的啊,诶我们直接可以在当前的这个配置文件里边去查看一下,当前系统已经提供支持的是像解析器。
07:08
那这里我们可以直接切过来,去查看一下cat ETC下边的shells。哎,我们可以看到当前支持的shell,哎,有直接这个SH,这明显就是shell的前两个字母嘛,啊,另外还有一个dash BA sh啊,另外我们看到这个还有user病,我们知道这个病目录下边的SH和bash,明显它都是指向user病下边的一个链接嘛,啊,所以这个我们直接就可以看得到,另外呢,除了SH和dash之外,另外还有TCSH啊,另外还有CHSH啊,那这也是比较常见的一种shell的解析器啊,LL的一个具体实现我们可以看成,那在这里呢,我们需要介绍的是最初的shell版本呢,其实我们知道肯定它是来源于unix的。哎,那最初的那个版本之前我们也介绍过,叫做bosh。
08:03
Bone she,诶,那这个shell版本呢,它可以进行非常灵活的编程操作,不过呢,呃,跟这个用户的交互就会稍微的差一点,所以后来呢,基于这个bonehell就发展出了。BASH啊,就是我们所说的这个bash,那这个bash呢,基于之前的这个最最基本的shell就扩展出了很多的扩展功能,目前大部分的Linux发行版,我们说默认的shell其实都是best shell啊,那当然了,我们当前这个红帽系都是这个best she,那如果是的变系的话,比方说我们说这个乌班图。他使用的默认shell就不是bash,也不是这里面的CSH啊,他用的是dash。有时候我们可能会看到这样一种是LL解析器的具体实现啊,那其实我们可以认为他们都差不多,大同小异,就像不同的Linux发行版一样啊。其实在系统里边啊,也是可以直接查看到当前默认的这个,呃,Shell到底是什么,比如说诶,我们可以直接啊LS,然后杠L1下去看,查看一下并目录下边,他们不是本来都都在这个并目录下边吗?我们可以直接去看一下他们到底都是些什么东西啊,然后去grape一下。
09:19
这里的稍微有点多,或者我们直接去。一下bash在这里就可以看的非常的明显,我们会看到啊,这里SH本身我们默认的这种shell实现啊,它其实默认就链接到了bash啊,所以很明显,当前3PS7红帽系啊,它默认的shell解析器就是bash。那另外我们这里也可以去直接echo啊,去找一个当前的环境变量啊,这个就是直接Dollar,然后大写的shell,我们可以直接看一下,当前默认当然就是bash了,所以无论从哪个角度我们都可以看到啊,当前我们学习的shell编程以及命令行里边啊,我们去输入一些命令,执行一些命令的时候,使用的基于的都是这样一个bash,我们查看进程肯定也就是一个bash进程了。
10:12
这是对于shell的一个整体介绍,其实更多的也是一些知识的回顾,有了这个基础,接下来我们就可以真正的去使用shell进行编程了。
我来说两句