Linux操作系统的Shell简介及其分类

什么是shell?

Shell是一种具备特殊功能的程序,它是介于使用者和UNIX/Linux 操作系统之核心程序(kernel)间的一个接口。为什么我们说 shell是一种介于系统核心程序与使用者间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个系统资源的管理者与分配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止使用者因为错误的操作而造成系统的伤害?众所周知,对计算机下命令得透过命令(command)或是程序(program);程序有编译器(compiler)将程序转为二进制代码,可是命令呢?其实shell也是一支程序,它由输入设备读取命令,再将其转为计算机可以了解的机械码,然后执行它。

各种操作系统都有它自己的shell,以DOS为例,它的shell就是command.com 檔。如同 DOS下有NDOS,4DOS,DRDOS 等不同的命令解译程序可以取代标准的command.com ,UNIX下除了Bourne shell(/bin/sh) 外还有C shell(/bin/csh)、Korn shell(/bin/ksh)、Bourne again shell(/bin/bash)、Tenex C shell(tcsh) … 等其它的shell。UNIX/Linux 将shell独立于核心程序之外,使得它就如同一般的应用程序,可以在不影响操作系统本身的情况下进行修改、更新版本或是添加新的功能。

shell的激活

在系统起动的时候,核心程序会被加载内存,负责管理系统的工作,直到系统关闭为止。它建立并控制着处理程序,管理内存、档案系统、通讯等等。而其它的程序,包括 shell程序,都存放在磁盘中。核心程序将它们加载内存,执行它们,并且在它们中止后清理系统。shell是一个公用程序,它在您签入时起动。藉由解译使用者输入的命令(由命令列或命令档),shell提供使用者和核心程序产生交谈的功能。

当您签入(login)时,一个交谈式的shell会跟着起动,并提示您输入命令。在您键入一个命令后,接着就是shell的工作了,它会进行:

1.语法分析命令列。

2.处理万用字符(wildcards)、转向(redirection)、管线(pipes)与工作控制(job control)。

3.搜寻并执行命令。

当您刚开始学UNIX/Linux系统时,您大部份的时间会花在于提示符号(prompt)下执行命令。

如果您经常会输入一组相同形式的命令,您可能会想要自动执行那些工作。如此,您可以将一些命令放入一个档案(称为命令档,script),然后执行该档。一个shell命令档很像是DOS下的批次檔(如 Autoexec.bat):它把一连串的UNIX 命令存入一个档案,然后执行该档。较成熟的命令档还支持若干现代程序语言的控制结构,譬如说能做条件判断、循环、档案测试、传送参数等。要写着写命令档,不仅要学习程序设计的结构和技巧,而且对 UNIX/Linux 公用程序及如何运作需有深入的了解。有些公用程序的功能非常强大(例如 grep、sed 和awk),它们常被用于命令档来操控命令输出和档案。在您对那些工具和程序设计结构变得熟悉之后,您就可以开始写命令档。当由命令档执行命令时,此刻,您就已经把 shell当做程序语言使用了。

细说 shell的生平

第一个有重要意义的,标准的UNIX shell是V7(AT&T的第七版)UNIX,在1979 年底被提出,且以它的创造者 Stephen Bourne 来命名。Bourne shell是以Algol 这种语言为基础来设计,主要被用来做自动化系统管理工作。虽然 Bourne shell以简单和速度而受欢迎,但它缺少许多交谈性使用的特色,例如历程、别名和工作控制。

C shell是在加州大学柏克来分校于70年代末期发展而成,而以2BSD UNIX的部分发行。这个 shell主要是由Bill Joy 写成,提供了一些在标准 Bourne shell所看不到的额外特色。C shell是以C 程序语言作为基础,且它被用来当程序语言时,能共享类似的语法。它也提供在交谈式运用上的改进,例如命令列历程、别名和工作控制。因为C shell是在大型机器上设计出来,且增加了一些额外功能,所以C shell有在小型机器上跑得较慢,即使在大型机器上跟 Bourne shell比起来也显得缓慢。

有了Bourne shell和C shell之后,UNIX 使用者就有了选择,且争论那一个 shell较好。AT&T 的David Korn 在80 年代中期发明了Korn shell,在1986 年发行且在1988 年成为正式的部分SVR4 UNIX。Korn shell实际上是Bourne shell的超集,且不只可在UNIX系统上执行,同时也可在OS/2、VMS、和DOS上执行。它提供了和Bourne shell向上兼容的能力,且增加了许多在C shell上受欢迎的特色,更增加了速度和效率。 Korn shell已历经许多修正版,要找寻您使用的是那一个版本可在ksh 提示符号下按 Ctrl-v 键。

时间: 2024-08-29 11:27:29

Linux操作系统的Shell简介及其分类的相关文章

Linux shell编程基础 一、shell简介

shell简介 shell处于kernel的外层,用来负责接收使用者输入的命令,然后将命令解释成kernel能了解的方式,然后由kernel去执行,再将结果传回默认的输出周边.shell是一种命令解释器,同时也是一个程序语言.shell有很多种,在众多的Linux发行版中,标准的shell是bash,也是我们学习的主要对象. 第一个程序 范例:hello.sh #!/bin/bash echo 'Hello World' 执行之前,给予执行权限: chmod +x hello.sh 执行: ./

linux的病毒发展史及分类_漏洞研究

1996年的Staog是Linux系统下的第一个病毒,它出自澳大利亚一个叫VLAD的组织(Windows 95下的第一个病毒程序Boza也系该组织所为).Staog病毒是用汇编语言编写,专门感染二进制文件,并通过三种方式去尝试得到root权限. Staog病毒并不会对系统有什么实质性的损坏.它应该算是一个演示版.它向世人揭示了Linux可能被病毒感染的潜在危险.Linux系统上第二个被发现的病毒是Bliss病毒,它是一个不小心被释放出来的实验性病毒.与其它病毒不同的是,Bliss本身带有免疫程序

《Linux C编程从入门到精通》——1.2 Linux的Shell

1.2 Linux的Shell Shell,俗称壳(用来区别于核),是指"提供给使用者使用的界面"的软件(命令解析器),类似于DOS下的command.com.它接收用户命令,然后调用相应的应用程序.同时它又是一种程序设计语言.作为命令语言,它交互式解释和执行用户输入的命令,或者自动地解释和执行预先设定好的一连串的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. Shell并不是Linux独有的东西,Windows下也同样有.S

Linux Namespace机制简介

最近Docker技术越来越受到关注,作为Docker中很重要的一项技术,Namespace也就经常在Docker的简介里面看到. 在这里总结一下它的内部机制.也解决一下自己原来的一些疑惑. Namespace是什么: C++中的Namespace: 首先,先提一下Namespace是什么.最早知道这个名词是在学习C++语言的时候.由于现在的系统越来越复杂,代码中不同的模块就可能使用相同变量,于是就出现了Namespace,来对全局作用域进行划分. 比如C++的标注库都定义在STD Namespa

linux内核-在linux操作系统的内核中,是如何对文件和进程进行保护的?

问题描述 在linux操作系统的内核中,是如何对文件和进程进行保护的? 在linux操作系统的内核中,是如何对文件和进程进行保护的?

以Linux的shell程序为入口到Teradata中执行SQL

Linux的Shell程序本身并不能直接访问Teradata,它是通过Teradata的BTEQ功能来间接实现访问.这个BTEQ相当于Oracle的SQLPLUS,总之是一个命令行工具. Teradata厂商提供Linux上的BTEQ安装包(其依赖的包也要安装). 下列代码不妨保存为"test_td.sh": cat <<! | /usr/bin/bteq .LOGON 192.168.9.100/td_user,123456; select * from my_db.my

Linux bash Shell中的变量类型详解

  这篇文章主要介绍了Linux bash Shell中的变量类型详解,变量类型共分为本地变量.局部变量.环境变量.位置变量和特殊变量等,需要的朋友可以参考下 在Linux系统中进行日常运维或者是编写脚本时,变量是再熟悉不过的了,但这些变量都有哪些类型,具体的用法又有哪些差异呢?本文整理分享给大家: 一.bash变量类型: 本地变量 局部变量 环境变量 位置变量 特殊变量(内置) 二.本地变量: varname=value:作用域为整个bash进程可以使用; 变量命名规范: 1. 只能含字母.数

Linux通过shell脚本创建SVN版本库简化创建过程

  Linux每次建立SVN版本库的过程都非常麻烦,如果将这些通过shell脚本来实现的话会简单很多,那么这个shell脚本要如何编译呢?下面小编就给大家介绍下Linux利用shell脚本创建SVN版本库的方法. 每次建立一个新的SVN版本库总感觉很繁琐,所以写了段脚本来把这个过程自动化,详细代码如下: #!/bin/bash # by www.111cn.net echo -n "Enter SVN name :" read svn_name /usr/bin/svnadmin cr

Linux下shell中case命令详解

  linux下shell中的case名字和C/C++中的switch类似,但是shell中的case更强大和复杂. 1.强大主要体现在:shell中case中的关键字可以是字符串类型,而每一项中可以包含正则表达式. 2.复杂主要体现在:shell中case的每一个项后有三个选择:break(常规的break).unconditional follow up(无条件继续)和conditional follow up(有条件继续). 这篇文章的重点是上面的第2点. case的无条件继续和有条件继续