shell概念

当用户登录到UNIX系统时,UNIX系统会启动一个名为UNIX shell的程序,作为用户与UNIX系统内核交互的一个界面 ,负责执行用户通过键盘输入的命令。
它的基本功能是解释命令 ,也称为UNIX命令解释器或者命令解释程序。

Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解释器)。它接收用户命令,然后调用相应的应用程序。同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。
基本上shell分两大类:
一:图形界面shell(Graphical User Interface shell 即 GUI shell)

例如:应用最为广泛的 Windows Explorer (微软的windows系列制作系统),还有也包括广为人知的 Linux shell,其中linux shell 包括 X windows manger (BlackBox和FluxBox),以及功能更强大的CDE、GNOME、KD、 XFCE。
二:命令行式 shell(Command Line Interface shell ,即CLI shell)

例如:
bash / sh / ksh / csh(Unix/linux 系统)
COMMAND.COM(MS-DOS 系统)
cmd.exe / 命令提示字符(Windows NT 系统)
Windows PowerShell(支援 .NET Framework 技术的 Windows NT 系统)
传统意义上的shell指的是命令行式的shell,以后如果不特别注明,shell是指命令行式的shell。

文字操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。

shell提供了你与操作系统之间通讯的方式。 这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell script是命令行命令简单的组合到一个文件里面。
Shell基本上是一个命令解释器,
类似于DOS下的command.com。它接收用户命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。

Unix Shell也叫做命令行界面,它是Unix操作系统下传统的用户和计算机的交互界面。
用户直接输入命令来执行各种各样的任务。当然微软的Windows操作系统也提供了这样的功能,它们是Windows 9X下的command.com,和基于Windows NT的各种系统下的cmd.exe。
普通意义上的shell就是可以接受用户输入命令的程序。它之所以被称作shell是因为它隐藏了操作系统低层的细节。同样的Unix下的图形用户界面GNOME和KDE,有时也被叫做虚拟shell或者图形shell。
Unix操作系统下的shell既是用户交互的界面,也是控制系统的脚本语言。
当然在这点也有别于Windows下的命令行,虽然也提供了很简单的控制语句。在Windows操作系统下,可能有些用户从来都不会直接的使用shell,然而在Unix系列操作系统下,shell仍然是控制系统启动,X Window启动,和很多其他实用工具的脚本解释程序。

交互式shell和非交互式shell
  交互式模式
就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
  shell也可以运行在另外一种模式:非交互式模式 。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

命令的执行(bash)

Bash会确定执行的程序的类型。普通程序是那些已经为你的系统编译好的系统命令。当这样的程序 运行的时候,Bash创建一个自身的拷贝因此一个新的进程就被创建。子进程和父进程拥有一样的环境,唯一个区别只有进程号。这个过程被称作内核空间创建进程 forking。
在内核空间创建进程后,子进程的地址空间被新进程数据覆盖。此步骤通过 exec 系统调用完成。
fork-and-exec 机制因此把旧的命令转化成新的,虽然新程序的执行环境还是和原来相同,包括输入输出设备的配置,环境变量和优先级。这种机制用来创建所有的UNIX进程,因此对Linux操作系统也起作用,甚至是第一个进程,进程号是1的 init,也是在称为 bootstrapping 的启动过程中被fork的。
当程序被一个脚本来执行,bash会使用 fork 创建一个新的bash进程。这个子shell一次从shell脚本中读取一行。每行的命令如果直接来自键盘的话会被读取,解释和执行
当子shell处理脚本中的每一行时,父进程等待子进程结束。当运行完shell脚本中每一行时,子shell就结束。父shell苏醒并且显示一个新的提示符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值