摘录自博客链接地址:http://c.biancheng.net/view/706.html

1. Shell是什么?

答:shell本意是指壳,在计算机术语中,shell是指用户操作接口的意思。操作系统运行起来后都会给用户提供一个操作接口,这个操作接口就叫shell。
用户可以通过shell来调用操作系统内部的复杂实现。

Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
Shell 本身并不是内核的一部分,它只是在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。
然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。

2. Shell的分类?

答:常用的Shell功能有两种形式外在形式:GUI和cmdline
    (1)GUI(图形用户界面),特点是操作简单、易学易用,适合使用电脑来工作的人。
    (2)cmdline(命令行界面),譬如linux的终端和windows的cmd,特点是不易用易学,优点是可以进行方便的shell编程,适合做开发的人。
    用户界面和命令行就是这个另外开发的程序,就是“代理”作用。在Linux下,这个特定程序叫做 Shell。

3. 为什么需要Shell?
答:1. 因为计算机程序本身很复杂,操作系统内部功能的实现和外面接口的调用必须分开。
       操作接口本身就是对内部复杂功能实现的一种封装,外部只需要通过操作接口就可以很容易去调用操作系统内部功能,但是却不用理会内部功能实现的复杂性和原理。

2. 由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;
       该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核了。

4. Shell 是如何连接用户和内核的?
答:Shell 能够接收用户输入的命令,并对命令进行处理,处理完毕后再将结果反馈给用户,比如输出到显示器、写入到文件等,
       这就是大部分读者对 Shell 的认知。你看,我一直都在使用 Shell,哪有使用内核哦?我也没有看到 Shell 将我和内核连接起来呀?!

其实,Shell 程序本身的功能是很弱的,比如文件操作、输入输出、进程管理等都得依赖内核。我们运行一个命令,大部分情况下 Shell 都会去调用内核暴露出来的接口,这就是在使用内核,只是这个过程被 Shell           隐藏了起来,它自己在背后默默进行,我们看不到而已。接口其实就是一个一个的函数,使用内核就是调用这些函数。这就是使用内核的全部内容了吗?嗯,是的!除了函数,你没有别的途径使用内核。

比如,我们都知道在 Shell 中输入cat log.txt命令就可以查看 log.txt 文件中的内容,然而,log.txt 放在磁盘的哪个位置?分成了几个数据块?在哪里开始?在哪里终止?如何操作探头读取它?

这些底层细节 Shell 统统不知道的,它只能去调用内核提供的 open() 和 read() 函数,告诉内核我要读取 log.txt 文件,请帮助我,然后内核就乖乖地按照 Shell 的吩咐去读取文件了,

并将读取到的文件内容交给 Shell,最后再由 Shell 呈现给用户(其实呈现到显示器上还得依赖内核)。整个过程中 Shell 就是一个“中间商”,它在用户和内核之间“倒卖”数据,只是用户不知道罢了。

5. Shell 也支持编程
Shell 并不是简单的堆砌命令,我们还可以在 Shell 中编程,这和使用 C++、C#、Java、Python 等常见的编程语言并没有什么两样。

Shell 虽然没有 C++、Java、Python 等强大,但也支持了基本的编程元素,例如:
if...else 选择结构,case...in 开关语句,for、while、until 循环;
变量、数组、字符串、注释、加减乘除、逻辑运算等概念;
函数,包括用户自定义的函数和内置函数(例如 printf、export、eval 等)。

站在这个角度讲,Shell 也是一种编程语言,它的编译器(解释器)是 Shell 这个程序。我们平时所说的 Shell,有时候是指连接用户和内核的这个程序,有时候又是指 Shell 编程。
Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、搭建 Web 运行环境、日志分析等,Shell 都非常合适。

使用 Shell 的熟练程度反映了用户对 Linux 的掌握程度,运维工程师、网络管理员、程序员都应该学习 Shell。
尤其是 Linux 运维工程师,Shell 更是必不可少的,是必须掌握的技能,它使得我们能够自动化地管理服务器集群,否则你就得一个一个地登录所有的服务器。

6. Shell 是一种脚本语言
任何代码最终都要被“翻译”成二进制的形式才能在计算机中执行。

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

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

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

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

Shell到底是什么?相关推荐

  1. Linux中的shell到底是啥,它和bash的关系是什么?

    转载:这篇小文章用来扫清一个小小的盲区,首先建立一个概念Linux中的shell到底是什么? - 一步一个小脚印 - 博客园 (cnblogs.com) [一] shell的含义:首先shell的英文 ...

  2. MYSQL SHELL 到底是个什么局 剑指 “大芒果”

    原文链接:https://www.modb.pro/db/22716?cyn 摘要:如果在WINDOWS上想链接在LINUX上的MYSQL有什么方法,windows上各种GUI,还是打开MYS 如果在 ...

  3. mysql shell是什么意思_MYSQL SHELL 到底是个什么局 剑指 “大芒果”

    如果在WINDOWS上想链接在LINUX上的MYSQL有什么方法,windows上各种GUI,还是打开MYSQL那个原本黑漆漆的小方格.现在你有了新的选,MYSQL Shell 全新的连接MYSQL ...

  4. Linux中的shell到底是什么?

    一.shell的含义: 首先shell的英文含义是"壳": 它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核. ...

  5. Linux中的shell到底是什么

    (引自:https://zhidao.baidu.com/question/557066905.html) [一] shell的含义: 首先shell的英文含义是"壳": 它是相对 ...

  6. android remote shell,关于 Appium V1.7.2 新增的唯一安卓可执行 mobile 命令 shell 的疑问...

    关于 mobile: shell 在更新日志中说明,是从 1.7.1 升级到 1.7.2 中 "Add --relaxed-security, and mobile: shell acces ...

  7. Shell编程中的“局部变量”和“导出变量” (export 用法)

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 如果你对子Shell的概念不甚了解,如果你对export的用法还没吃透 ...

  8. 重新写博+linux查找系列

    好多天没有写博客了,主要是自己懒惰了,有点厌烦了,真的应该好好反省一下了.最近的我好浮躁,所以呢,很累,而且没有收获,从今天起呢,我要重新开始我的写博之旅了. 话说我真的是越来越喜欢linux里面的命 ...

  9. 代码测试,调试与优化小结

    http://www.cppblog.com/cuijixin/default.html?page=8 代码测试.调试与优化的小结 by falcon<zhangjinw@gmail.com&g ...

  10. 网络安全应该了解的基础大全(收集)

    网管和不是专业的***,但是如果网管不了解基本的******和防范知识,就不是一个合格的网管,今天我就集了基本的***常用知识,希望不了解这些知识,或者对这些一知半解的朋友,多多了解,做一个合格的网管 ...

最新文章

  1. Java设计模式--总结
  2. xp系统如何开启索引服务器,Windows XP系统关闭磁盘索引的两个方法图文教程
  3. 华为鸿蒙os手机图片,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  4. mysql中group by 的用法解析
  5. keycloak 调研资料
  6. 如何保障大数据环境下的数据安全
  7. LayaAir UI 组件 # Button 按钮
  8. 动态下拉框中如何使用常量?
  9. chardet使用方法
  10. 重大好消息,郑州社保卡将逆天,不看你将损失一大笔钱!
  11. 使用 ESP-Prog / Jlink 进行 JTAG 调试时的常见错误及解决办法
  12. 华为Routing Switching切换为Datacom,究竟变了些什么
  13. 十种放松缓解压力方法
  14. 第一章 复数 1-2 复数的几何表示
  15. 网贷害人,迷途知返后,天真的以为外包只要会增删改查就够了???
  16. 【智能零售】解读双11后的新零售趋势
  17. Docker的镜像制作与整套项目一键打包部署
  18. 阿尔法小蛋机器人怎样_深入解密科大讯飞阿尔法小蛋智能云陪护机器人TYS1怎么样呢?评价如何?求助专业爆料评测...
  19. 基于Python实现的电梯进程及调度管理
  20. CSDN博文“待审核”检测规则分析之如何避免“待审核”

热门文章

  1. Flash Builder 4.6 序列号
  2. java.lang.IllegalStateException崩溃处理——4种情形
  3. vue zxing 实现一维码、二维码扫描可移动端h5使用代码亲测可用
  4. java 开源 邮件系统_Java架构师方案—简单的邮件系统(附完整项目代码)
  5. Unity 3D模型展示框架篇之资源打包、加载、热更(二)
  6. Bjui前端框架文档链接
  7. Json解析工具类之GsonUtil类
  8. qq和qq浏览器的区别
  9. python获取本机ip地址_python3 获取本机ip地址
  10. cmd指令-快捷查看电脑ip地址