00. 目录

文章目录

  • 00. 目录
  • 01. Shell简介
  • 02. Shell分类
  • 03. 交互式shell和非交互式shell
  • 04. 登录shell和非登录shell
  • 05. Shell类型
  • 06. 参考

01. Shell简介

在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。

[外链图片转存失败(img-n2EQMtPJ-1562641251457)(assets/1562638860330.png)]

shell同时又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

02. 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 系统)

(MS-DOS系统)cmd.exe/ 命令提示字符([Windows NT](https://baike.baidu.com/item/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。它接收用户命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。

03. 交互式shell和非交互式shell

交互式shell和非交互式shell(interactive shell and non-interactive shell)
交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。
非交互式模式,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。
可以通过打印“$-”变量的值(代表着当前shell的选项标志),查看其中的“i”选项(表示interactive shell)来区分交互式与非交互式shell。

交互式shell

[deng@localhost ~]$ echo $-
himBH

非交互式shell

deng@localhost ~]$ cat test.sh
echo $-
[deng@localhost ~]$ ./test.sh
hB
[deng@localhost ~]$

04. 登录shell和非登录shell

登录shell:是需要用户名、密码登录后才能进入的shell(或者通过”–login”选项生成的shell)。
非登录shell:当然就不需要输入用户名和密码即可打开的Shell,例如:直接命令“bash”就是打开一个新的非登录shell,在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell。
执行exit命令,退出一个shell(登录或非登录shell);执行logout命令,退出登录shell(不能退出非登录shell)。

//登录shell
[deng@localhost ~]$ bash --login
[deng@localhost ~]$ logout
//登录shell
[deng@localhost ~]$ bash --login
[deng@localhost ~]$ exit
登出//非登录shell
[deng@localhost ~]$ bash
[deng@localhost ~]$ logout
bash: logout: 不是登录shell: 使用 `exit'
[deng@localhost ~]$ exit
exit
[deng@localhost ~]$

bash是 login shell 时,其进程名为”-bash“ 而不是”bash”。 比如下面的命令行演示:
man bash: A login shell is one whose first character of argument zero is a -, or one started with the –login option.

在chinaunix论坛中看到的关于登录shell与非登录shell、交互式shell与非交互式shell的讨论:
Login Shell:当init3时,mingetty spawn出登录提示符的时候,你输入帐号和密码进入了,出现了shell提示符,这个过程就是登录shell;
Interactive Shell:接下来你得到了一个像“root@host />”这样的提示符,你输入什么,它就解释出什么,这就是交互式shell;你在当前shell又fork了一个 shell(bash),这个bash也是交互式shell。通常情况下interactive shell是login shell派生出来的。
Non Interactive Shell:你需要写一个bash script,用外部shell执行“bash script.sh”命令,它(bash)从可以第一条命令执行到最后一条然后退出,不与你进行任何交互,它就是非交互式shell。
交互式非登录shell,例如你在Gnome图形界面中打开“终端”出来的那种窗口程序,和登录shell相比,它是“非登录”的,你并不需要输入用户名和密码,和非交互式shell相比,这是“交互式”的,就像你说的那它“你输入什么,它就解释什么”。

对于Bash来说,登录shell(包括交互式登录shell和使用“–login”选项的非交互shell),它会首先读取和执行/etc/profile全局配置文件中的命令,然后依次查找/.bash_profile、/.bash_login 和 ~/.profile这三个配置文件,读取和执行这三个中的第一个存在且可读的文件中命令。除非被“–noprofile”选项禁止了。在非登录shell里,只读取 ~/.bashrc (和 /etc/bash.bashrc、/etc/bashrc )文件,不同的发行版里面可能有所不同,如RHEL7.5中非登录shell仅执行了“~/.bashrc”文件(没有执行/etc/bashrc),而Ubuntu16.04中却依次执行了/etc/bash.bashrc 和 ~/.bashrc 文件。
对于这些规则,可以直接在相应的配置文件中加一些echo命令来验证其真实性。

05. Shell类型

在UNIX中主要有:

Bourne shell (包括 sh,ksh,and bash)

Bourne shell ( sh)

Korn shell ( ksh)

Bourne Again shell ( bash)

POSIX shell ( sh)

C shell (包括 csh and tcsh)

C shell ( csh)

TENEX/TOPS C shell ( tcsh)

Bourne Shell

首个重要的标准Unix Shell是1979年底在V7 Unix(AT&T第7版)中引入的,并且以它的创始科技部基础条件平台“国家气象网络计算应用节点建设”(2004DKA50730)资助者Stephen Bourne的名字命名。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。

C Shell

Bill Joy于20世纪80年代早期,在伯克利的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。

Korn Shell

有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。

Bourne Again Shell (bash)

bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat,Slackware,Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。

POSIX Shell

POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0,POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.

各主要操作系统下缺省的shell:

AIX下是Korn Shell.

Solaris缺省的是Bourne shell.

FreeBSD缺省的是C shell

HP-UX缺省的是POSIX shell.

Linux是Bourne Again shell.

[Windows PowerShell](https://baike.baidu.com/item/Windows PowerShell)是一种新的交互式的命令行和基于任务脚本编写技术,它使信息技术(IT) 管理员能够全面地自动操作和控制系统管理任务,从而提高了管理员的生产力。Windows PowerShell 包括多个系统管理实用工具、一致的语法和命名惯例、及对普通管理数据更好地导航,如登记、证书存储 或 Windows Management Instrumentation (WMI)。Windows PowerShell 还专门针对 IT 管理,提供直观的脚本编写语言。

06. 参考

百度百科
参考:【Linux】一步一步学Linux系列教程汇总

【Linux】一步一步学Linux——初识Linux命令解析器(10)相关推荐

  1. Linux零基础入门(一)初识Linux

    Linux零基础入门(一)初识Linux 前言 操作系统概述 一 操作系统概述 1 硬件和软件 2 操作系统 二 初识Linux 1 Linux的诞生 2 Linux内核 3 Linux发行版 三 虚 ...

  2. Linux 命令解析器

    文章目录 命令解析器概念 命令解析器的作用: 常用的命令解析器: shell -- Bourne Shell bash -- Bourne Again Shell 查看当前系统所使用的shell 查看 ...

  3. linux 文件夹大小_技能“慧”|初识Linux(二)

    上期我们对Ubuntu的界面有了简单的认识,以及如何与本机之间进行文件传输,今天我们就来带大家一起了解一下命令行. 去可视化--命令行 虽然Ubuntu有着漂亮的图形界面,但是我们使用更多的还是命令行 ...

  4. 【Linux入门指北】第一篇 初识Linux

    目录 前言 一.Linux操作系统的发展历史 1.Linux操作系统的诞生 2.Linux操作系统的发展 1.自由软件基金会(FSF) 2.GPL协议 3.GUN工程 二.Linux的不同发行版本 1 ...

  5. 学linux有什么用主要学什么软件,Linux为何受欢迎?学习Linux有什么用?

    Linux在很多人的认知中只是操作系统,其实Linux也是非常热门的技术,但对于很多初学者而言,对Linux了解并不是很清楚,你知道Linux为何受欢迎?学习Linux有什么用吗?下面跟大家分享一下. ...

  6. Linux编程基础:第1章初识Linux 课后习题

    <Linux编程基础>黑马程序员/编著 清华大学出版社 目录 一.填空题 二.判断题 三.单选题 四.简答题 1.简单叙述Linux操作系统的特点. 2.陈述ifconfig命令和ping ...

  7. Linux 性能优化工具包 sysstat 以及 sysstat 服务(sar 命令解析)

    1. sysstat service 1.1. /etc/cron.d/sysstat Linux 下的性能分析,包括CPU使用情况,内存使用情况,IO状态等等与系统相关的状态,少不了要使用 syss ...

  8. linux ps 简书,史上最全ps 命令解析

    进程状态 https://www.cnblogs.com/diegodu/p/9167671.html Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态. 与T ...

  9. (三)Linux vi 文本编辑器,用户管理,组管理,Sudo命令,时间管理

    文章目录 具体内容 1.1 vi 文本编辑器 1.2 用户权限管理,组管理和时间管理 1.2.1 用户管理 1)保存用户信息的文件:/etc/passwd 2)保存用户密码信息的文件:/etc/sha ...

最新文章

  1. 京东智能情感客服挽救一名学生生命,“可信赖的AI”用温暖前行
  2. STM32 逐次逼近寄存器型(SAR)模拟数字转换器(ADC)
  3. html验证座机号码_html5表单pattern属性配合正则验证电话和手机号码
  4. 用户控件中使用相对路径问题
  5. java----java工具包
  6. SCCM 2012系列16 操作系统播发⑤
  7. 记一次MySQL中Waiting for table metadata lock的解决方法
  8. 推荐三个不错的开源项目
  9. 整理下Jquery中用到的英语单词 带音标
  10. 图片复印如何去除黑底_如何去除扫描件的底色? 扫描的图片去除背面的阴影的方法...
  11. 管理理念:导致员工工作效率低下的8大原因
  12. dmg文件 linux,Linux_dmg文件是什么Linux如何通过命令行建立dmg文件,  Linux系统操作中,很多人 - phpStudy...
  13. OTA升级的实现原理
  14. html怎么使两张照片重叠,怎样把两张图片叠加在一起?
  15. 前端工程师的 caniuse
  16. 四大CPU架构的区别
  17. 单纤双向(Bidi)是如何实现的?会在5G前传中占一席之地吗?
  18. 自写:斤与公斤的转化
  19. DataHub调研数据血缘
  20. 大数据挖掘及应用(期末复习版)

热门文章

  1. 使用.net资源文件时候发生的问题
  2. demod函数_MATLAB信号处理工具箱函数 | 学步园
  3. Promises/A+规范中文翻译
  4. Main函数中参数argc,argv说明
  5. c#如何判断字符串是否含中文
  6. java_io_listFile()的应用和匿名内部类
  7. Android 带有字数统计的 TextInputLayout
  8. 中科燕园GIS外包案例之五---地下管线GIS管理信息系统
  9. (求助)即时发送异常给开发人员
  10. ABAP:向自建表写入数据时,需要注意的问题