什么是shell?

本文源于网络资源的学习与整理,如有侵权请告知删除。

shell的概念

shell,它的意思是“壳”,如果理解shell在linux中的作用(内核的外壳,既保护了内核,也向用户提供了操作内核的接口),就能明白它的贴切与形象。

对于图形界面,用户点击某个图标就能启动某个程序;对于命令行,用户输入某个程序的名字(可以看做一个命令)就能启动某个程序。这两者的基本过程都是类似的,都需要查找程序在硬盘上的安装位置,然后将它们加载到内存运行。换句话说,图形界面和命令行要达到的目的是一样的,都是让用户控制计算机。然而,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁。由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核。如此一来,用户和内核之间就多了一层“代理”,这层“代理”既简化了用户的操作,也保护了内核。用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做 Shell。这里之所以强调在Linux下,是因为shell这个概念是Linux系统中才有的。

我们可以在 Shell 中编程,这和使用 C/C++、Java、Python 等常见的编程语言并没有什么两样。Shell 虽然没有 C/C++、Java、Python 等强大,但也支持了基本的编程元素,例如:if...else 选择结构,switch...case 开关语句,for、while、until 循环;变量、数组、字符串、注释、加减乘除、逻辑运算等概念;函数,包括用户自定义的函数和内置函数(例如 printf、export、eval 等)。站在这个角度讲,Shell 也是一种编程语言,它的编译器(解释器)是 Shell 这个程序。我们平时所说的 Shell,有时候是指连接用户和内核的这个程序,有时候又是指 Shell 编程。Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、一键搭建Web开发环境、日志分析等,Shell 都非常合适。

引用百度百科的文字总结shell的概念——Shell语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称。Shell作为语言来说,它既是终端上的用户与UNIX操作系统会话的语言,又可作为程序设计的语言,所以Shell是用户与系统之间的接口,而且是一种比较高级、易被用户理解和使用的程序设计语言,它为用户提供了使用方便、功能强、又容易扩充的程序设计环境。

shell的作用 

Shell 除了能解释用户输入的命令,将它传递给内核,还可以完成以下内容。

  • 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果;
  • 在多个程序之间传递数据,把一个程序的输出作为另一个程序的输入;
  • Shell 本身也可以被其他程序调用。

由此可见,Shell 是将内核、程序和用户连接了起来。

shell是一种脚本语言   

任何代码最终都要被“翻译”成二进制的形式才能在计算机中执行。


有的编程语言,如 C/C++、Pascal、Go语言、汇编等,必须在程序运行之前将所有代码都翻译成二进制形式,也就是生成可执行文件,用户拿到的是最终生成的可执行文件,看不到源码。这个过程叫做编译(Compile),这样的编程语言叫做编译型语言,完成编译过程的软件叫做编译器(Compiler)。


而有的编程语言,如 Shell、JavaScript、Python、PHP等,需要一边翻译一边执行,不会生成任何可执行文件,用户必须拿到源码才能运行程序。程序运行后会即时翻译,翻译完一部分执行一部分,不用等到所有代码都翻译完。这个过程叫做解释,这样的编程语言叫做解释型语言或者脚本语言(Script),完成解释过程的软件叫做解释器。


编译型语言的优点是执行速度快、对硬件要求低、保密性好,适合开发操作系统、大型应用程序、数据库等。脚本语言的优点是使用灵活、部署容易、跨平台性好,非常适合Web开发以及小工具的制作。

Shell 就是一种脚本语言,编写完源码后不用编译,直接运行源码即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chmod的理解

ll file 共有是十位第一位:如果是 - 表示它是文件第一位:如果是d 表示它是目录剩下的333 分别表示 属主u属组g其他用户o所以如下:转载于:https://blog.51cto.com/zlong37/1567472

中国象棋程序的设计与实现(五)--回答CSDN读者的一些问题

最近写了很多文章,同时,也上传了很多免积分的FansUnion原创的优质资源,有兴趣的同学可以看来我的CSDN博客瞧瞧 http://blog.csdn.net/FansUnion。近期,收到了不少读者的评论、反馈、留言。对于其中的一些问题,我想专门…

几种常见的shell:sh、bash、csh、tcsh、ash

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 我们知道,Windows、Mac OS、Android 等操作系统由一家公司开发,所有的核心软件和基础库都由一家公司做决定,容易形成统一的标准,一般不会…

第九周项目6-穷举法之年龄几何

张三、李四、王五、刘六的年龄成一等差数列,他们四人的年龄相加是26,相乘是880,求以他们的年龄为前4项的等差数列的前20项。 构建代码: /**Copyright (c) 2014,烟台大学计算机学院*All gight reserved.*文件名称:temp.…

JavaScript操作大全整理(思维导图七--字符串函数)

7. JavaScript 字符串函数 转载于:https://www.cnblogs.com/yuxia/p/3360824.html

进入shell的两种方法

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 方法一:在图形界面中打开终端 在图形界面下,进入 Shell 的方法是使用 Linux 桌面环境中的终端模拟包,也就是我们常说的终端,这样在图形桌…

外籍主管眼中的阿里巴巴

尝试接受一份新领域的职位有时是值得的,而对雇主来说,任命“非正统人选”从而给团队带来清新气息,也是有好处的。 这是詹姆斯•哈迪(James Hardy)的经验。一位知道他想转行的朋友和他联系,后来他就得到了现在的职位——在线零售商…

Shell脚本运行方法

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 在文本编辑器中编写如下代码并保存为test.sh。 #!/bin/bash echo "Hello World !" 这个文件的扩展名为sh(sh代表shell),但其实扩展名并不…

Perl 中级教程 第5章课后习题

5. 9. 1. 练习1 [5 分钟] 先不要运行程序, 看看你能否判断出这程序的哪部份出了问题?如果你看不出 来, 就可以运行一相程序, 得到些暗示, 来看是否能修改好: my %passenger_1 { name > Ginger, age > 22, occupation > Movie Star, real_age &…

SQL Server 固定角色

1、 查看固定服务器角色 execute sp_helpsrvrole; 管理: execute master..sp_addsrvrolemember logingNameneeky rolenamesysadmin; go execute master..sp_dropsrvrolemember logingNameneeky rolenamesysadmin; go 2、 查看固定数据库角色成员 execute sp_helprol…

Shell变量与Shell特殊变量

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 一、Shell变量 脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则。在 Bash shell 中,每一个变量的值都是字符串&…

如何在我们项目中利用开源的图表(js chart)

最近觉得应该把自己在技术上的一些心得记录在博客里面跟大家分享,一起讨论,一起成长! 这篇随笔主要为介绍chart在项目中的运用,因为在我们看到一些开源的chart时候,是使用纯js 或者建立在一些插件(例如:jqu…

vb.net中东软医保接口的调用

前段时间接了个医院管理系统的小项目,要求接入本市医保接口,本市的医保接口采用的是东软的接口平台,为动态库版,只提供了几个配置文件和几个DLL动态库,文档中写的不够详细,并没有各种语言平台的例子&#x…

Shell替换:转义字符、变量替换,命令替换

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 一、转义字符 如果表达式中包含特殊字符,Shell 将会进行替换。除了在双引号中使用变量会进行替换,转义字符也是一种替换。 举个例子: #!/bin/basha1…

关于过去的这一个月——面试经历

终于到了周末,感觉很久很久没有去闲下来了!9月过半,我还在Symantec做实习生,做点单位的工作,研究点自己喜欢的事情,小日子过得还是蛮舒服的。中秋节提前买好了去女朋友家的动车票,规划着去这里那…

python读取postgresql数据库并发送相关提醒邮件

代码如下:#!/usr/bin/env pythonimport smtplibfrom email.mime.text import MIMETextimport psycopg2import datetimefrom time import *mail_host "smtp.XXX.com" mail_user "XXX" mail_pass "XXX" mail_postfix&…

Shell运算符:算术运算符、关系运算符、布尔运算符等

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 expr表达式计算工具 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,其中 expr 最常用。 expr 是一款表达式计算工具&…

AjaxControlToolkit的使用

摘自&#xff1a;http://www.cnblogs.com/zm235/archive/2008/05/09/1189558.html 暂时的做法&#xff1a; 把AjaxControlToolkit.dll复制到项目的bin目录里面,然后配置Web.config文件&#xff0c;例如&#xff1a; <configuration><system.web><pages><c…

Shell的注释

关于注释&#xff0c;了解三点内容。 &#xff08;1&#xff09;Shell脚本中&#xff0c;以“#”开头的行就是注释&#xff0c;会被解释器忽略。 &#xff08;2&#xff09;sh里没有多行注释&#xff0c;只能每一行加一个#号。 &#xff08;3&#xff09;遇到大段的代码需要…

linq中let关键字学习

linq中let关键字就是对子查询的一个别名&#xff0c;let子句用于在查询中添加一个新的局部变量&#xff0c;使其在后面的查询中可见。 linq中let关键字实例 1、传统下的子查询与LET关键字的区别 C# 代码 复制static void Main(string[] args) { int[] numbers new[] { 1, 2,…