什么是shell?
shell其实是一个命令解释器,它的作用是解释用户输入的命令和程序,命令和程序可以理解成我们图中的应用程 序,我们linux系统中的那些命令其实也都是一个个的小程序,只不过完成的是系统的应用功能。我们在系统的终端中输入一条命令,可以立马看到一条或者几 条系统回复我们的信息,其实就是shell在帮我们回复,所以shell可以称之为命令解释器。这种从键盘一输入命令,就可以立马得到相应的回复信息,叫 作交互的方式,相当于我们在和电脑交流。Shell存在于系统的最外层,所以算作操作系统的外壳,它之外的应用程序就不能算作操作系统了。我们从输入系统的账户密码开始,到登录系统以后的所有操作都是shell在帮我们解释执行的。
基本上shell分两大类:
一:图形界面shell(Graphical User Interface shell 即 GUI shell)
例如:应用最为广泛的 Windows Explorer (微软的windows系列操作系统),还有也包括广为人知的 Linux shell,其中linux shell 包括 X window manager (BlackBox和FluxBox),以及功能更强大的CDE、GNOME、KDE、 XFCE。
二:命令行式shell(Command Line Interface shell ,即CLI shell)
例如:
bash / sh / ksh / csh(Unix/linux 系统)
交互式shell和非交互式shell
- 交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
- shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
什么是shell脚本?
如果我们的命令或者应用程序不在命令行直接执行,而是通过一个程序文件来执行时,这个程序就被称之为shell 脚本。Shell脚本里面通常内置了多条命令,有的还包含控制语句,比如if和else的条件控制语句,for和select的循环控制语句等。这些内置 在一个shell脚本中的命令通常是一次性执行完成,不会不停的返回信息给用户,这种通过文件执行脚本的方式是非交互方式。
为什么要使用shell脚本?
使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。或者可以归纳成以下三点:
- 简单性:Shell是一个高级语言;通过它,你可以简洁地表达复杂的操作。
- 可移植性:使用POSIX所定义的功能,可以做到脚本无须修改就可在不同的系统上执行。
- 开发容易:可以在短时间内完成一个功能强大又妤用的脚本
shell脚本的执行方式
最常见的脚本执行方式sh /mnt/test.sh,shell会开启一个子程序执行脚本
适用范围:脚本文件本身没有可执行权限(即文件权限属性x位为-号),或者脚本文件开头没有指定解释器时需要使用的方法。
或者chmod +x /mnt/test.sh给sh权限,直接运行脚本的幻数
适用范围:脚本有执行权限,允许调用子程序执行脚本
/mnt/test.sh=./test.sh,也可以用./test.sh执行
source /mnt/test.sh 这种执行方式不会开启任何子程序
适用范围:加载并执行的相关脚本文件的命令及语句,而不是产生一个子Shell来执行文件中的命令
source test.sh=. test.sh,同样用. test.sh也不会开启任何子程序
shell脚本执行方式的区别(面试题):
题目:a=1,如何在脚本中直接调用a
我们对比了一下五种脚本运行方式,发现只有source test.sh和. test.sh两种运行方式可以输出a的值
这是因为source test.sh和. test.sh是在当前shell里面运行的没有调用子程序,所以它们可以获取a的值
而其它shell脚本运行方式都调用了子程序执行脚本,所以无法获取当前shell里a的值