用户、Shell、Linux内核、硬件的关系如下图:
Shell是一个应用程序,也可以说是一个命令解释器,它是用户和Linux内核之间的桥梁,可以将用户在图形界面上的操作或在终端输入的命令传递给Linux内核,然后Linux内核再调度各个硬件及其他资源来完成用户的操作。
什么是Linux的内核?在Linux操作系统中,真正能够操作计算机硬件完成某个用户功能的那一部分被称为Linux系统的内核。用户在使用Linux系统时,是不可以直接操作内核的,而是通过Shell来间接的操作内核的。Shell不属于内核的一部分,而是在Linux内核之外开发的应用程序,它将接收到的用户鼠标点击操作或输入的命令传递给内核,而内核再去调度硬件去完成指定的操作。这样用户就不需要直接操作内核,而是通过Shell间接地操作内核,内核也不会被直接的暴露于外部,保障了内核的安全性,也简化了用户的操作。
另外,Shell在将用户的操作传递给内核的过程,就是在调用内核提供的API接口的过程。比如,用户在图形界面或者终端命令行做了一个打开文件的操作,而这个用户的操作Shell接收到后,就会去调用内核提供的相应的函数,然后内核再去调度硬件资源来完成用户的操作。
我们知道,Linux是一个开源的操作系统,它是由世界各地的多个组织机构或个人共同开发完成的,每个组织机构或个人负责一部分功能,最后组合在一起,就构成了现在我们使用的Linux。也正是这个原因,这些不同的组织机构或者个人都会开发出可以在Linux系统中使用的应用程序,而这些应用程序的功能可能是类似的,各有优缺点,至于使用哪一个由用户选择。而Shell就是这样的一个应用程序,所以Shell有很多个版本,目前Linux的大多数发行版默认使用的Shell是bashshell。其他常见的Shell版本如下:
(1)sh:sh的全称是Bourneshell,是UNIX上的标准shell,很多UNIX版本都配有sh。sh是第一个流行的Shell。
(2)csh:这个shell的语法有点类似C语言,所以才得名为Cshell,简称为csh。
(3)tcsh:tcsh是csh的增强版,加入了命令补全功能,提供了更加强大的语法支持。
(4)ash:一个轻量级占用资源少的Shell,适合运行于低内存环境,与bashshell完全兼容。
(5)bash:bashshell由GNU组织开发,保持了对shshell的兼容性,是各种Linux发行版默认配置的shell。
在Linux系统中,一般默认使用的Shell是bashshell。Shell是一个应用程序,一般都是放在/bin或者/user/bin目录下,而当前Linux系统可用的Shell都记录在/etc/shells文件中。
(1)查看系统当前可用的Shell,执行命令【cat-n/etc/shells】:
(2)查看系统当前默认使用的shell,执行命令【echo$SHELL】:
(3)查看各个用户使用的Shell,执行命令【cat-n/etc/passwd】:
我们已经知道,Shell是一个应用程序,而这个应用程序不单单只是可以将用户的操作命令传递给Linux内核,它也支持编程。Shell都会对应一套编程语言的语法,而这套语言就被称为Shell编程语言或是Shell脚本语言。Shell编程语言和JavaScript语言一样是一种脚本语言,它不需要编译,而它的解释器就是Shell应用程序本身。
我们平时工作中所说的Shell,大多数情况指的是Shell脚本语言,而不是Shell应用程序。
我们在使用Shell脚本语言时,可以和Linux系统的其他操作命令结合使用(如ls、grep等等),而我们使用Shell脚本语言和其他命令结合编写能够完成某个特定功能的扩展名为.sh的文本,就叫做Shell脚本程序。
我们已经知道,Shell有很多个版本,而每个版本支持的Shell脚本语言语法可能是有差异的,而下面的关于Shell脚本的所有例子都是针对于BashShell这个版本而言。
(1)在根目录下新建一个Hello.sh脚本:【vimHello.sh】
(2)然后输入以下内容:
第二行:【echo"HelloWorld"】表示输出文本HelloWorld!;
(3)然后保存退出:【!wq】;
(4)这样,一个能够输出HelloWorld!的脚本就编写完成。
补充说明:
(1)输入代码:【name=张三】,表示定义了一个变量name,它的值为张三;
(2)输入代码:【echo$name】,表示打印变量name的值。
当然,这种方式只适合去执行逻辑简单只有一两句代码的情况,大多数情况下我们还是将Shell编程代码写在.sh脚本中再去执行。
上面我们已经编写了一个能够输出HelloWorld!的Shell脚本运行,而现在我们就要执行Hello.sh这个脚本。而Shell脚本的执行方式有两种:
第一种:给予.sh文本可执行权限,然后执行文本:
(1)先给予Shell脚本可执行权限:【chmod+xHello.sh】;
(2)直接执行:绝对路径:【/Hello.sh】或者相对路径:【./Hello.sh】
注意,这里执行时如果使用的是相对路径,必须要以./开头,表示当前目录,否则系统会找不到脚本,从而导致执行失败。
第二种:将Shell脚本作为参数传递给BashShell解释器:
(1)这里使用BashShell来作为解释器,那么我们直接调用BashShell这个程序,然后把Hello.sh这个脚本作为参数传给Shell即可:【/bin/bashHello.sh】或【bashHello.sh】
注意,这种方式执行脚本文件时,如果使用的是相对路径,那么【/bin/bash./Hello.sh】和【/bin/bashHello.sh】是一样的,并无使用第一种执行方式中的区别。
编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!