00. 目录

@

参考博客: https://blog.csdn.net/dengjin20104042056/article/details/94669639

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命令解析器(10)的更多相关文章

  1. 【转帖】Linux上,最常用的一批命令解析(10年精选)

    Linux上,最常用的一批命令解析(10年精选) https://juejin.im/post/5d134fbfe51d4510727c80d1 写的挺好呢 Linux这么多命令,通常会让初学者望而生 ...

  2. Linux上,最常用的一批命令解析(10年精选)

    Linux这么多命令,通常会让初学者望而生畏.下面是我结合日常工作,以及在公司的内部培训中,针对对Linux不是很熟悉的同学,精选的一批必须要搞懂的命令集合.任何一个命令其实都是可以深入的,比如tai ...

  3. Linux上,最常用的一批命令解析【10年精选】

    原文链接:https://mp.weixin.qq.com/s/QkqHexs_kOgy_5OwbwyFww 建议点击原文链接查看 不同平台linux客户端连接工具分享: windos终端神器:SSH ...

  4. 《精通Linux C编程》1.3Linux系统的常用命令-笔记

    [toc] 1.3.1了解Shell Linux常用命令的运行环境就是Shell,它是一种命令解析器,在用户和操作系统之间提供了一个交互接口. 用户在命令行输入命令,然后Shell对该命令进行解析并将 ...

  5. linux入门系列5--新手必会的linux命令

    上一篇文章"linux入门系列4--vi/vim编辑器"我们讨论了在linux下如何快速高效对文本文件进行编辑和管理,本文将进一步学习必须掌握的linux命令,掌握这些命令才能让计 ...

  6. Linux网络编程一步一步学【转】

    转自:http://blog.chinaunix.net/uid-10747583-id-297982.html Linux网络编程一步一步学+基础  原文地址:http://blogold.chin ...

  7. 【Linux】一步一步学Linux——Linux系统目录详解(09)

    目录 00. 目录 01. 文件系统介绍 02. 常用目录介绍 03. /etc目录文件 04. /dev目录文件 05. /usr目录文件 06. /var目录文件 07. /proc 08. 比较 ...

  8. 【Linux】一步一步学Linux——虚拟机安装和卸载(05)

    目录 00. 目录 01. Workstation Pro 15.0安装简介 02. Windows 主机上安装 Workstation Pro 15.0 03. Linux 主机上安装 Workst ...

  9. 【Linux】一步一步学Linux——Linux版本(03)

    目录 00. 目录 01. Linux内核版本 02. Linux内核官方网站 03. Linux发行版本 04. Linux发行版本介绍 4.1 Ubuntu 4.2 RedHat 4.3 Debi ...

随机推荐

  1. 2019.12.06 java基础代码

    操作系统中默认码表是:gbk      (一个中文字符占两个字节): utf-8(一个中文字符占三个字节): 数据库建库时的默认码表是:拉丁码表: (1)       public class 定义: ...

  2. terraform v0.12.0 发布了

    v0.12.0 相比以前的有好多新的特性,包括语法,以及函数增强,昨天还在折腾的一个json解码的问题,直接使用 v0.12.0 就可以解决了,同时也包含了for 操作处理同时官方文档对于v0.12. ...

  3. SPA 首屏加载性能优化之 vue-cli3 拆包配置

    前言 现在已经是vue-cli3.x    webpack4.x 的时代了,但是网上很多拆包配置还是一些比较低版本的. 本文主要是分享自己的拆包踩坑经验. 主要是用了webpack4 的 splitC ...

  4. 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying 题解

    P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...

  5. BZOJ 1477: 青蛙的约会

    二次联通门 : BZOJ 1477: 青蛙的约会 /* BZOJ 1477: 青蛙的约会 扩展欧几里得 列出方程, 判断一下 */ #include <iostream> #include ...

  6. 微信小程序知识云开发

    一个小程序最多5个服务类目,一个月可以修改3次类目 小程序侵权投诉的发起与应对 软件著作权作品登记证书 实现小程序支付功能 如何借助官方支付api简单.高效率地实现小程序支付功能 借助小程序云开发实现 ...

  7. 用Visual Studio编写UDF的一点小技巧(二)

  8. Don't always upset yourself !

  9. [Beta]第三次 Scrum Meeting

    [Beta]第三次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/7 22:00 30min 大运村公寓6F寝室 附Github仓库:WEDO 例会照片 工作情况总 ...

  10. opendaylight+sfc 发送测试流量报错找不到SFF Name

    问题介绍: 启动opendaylight sfc后,再启动sfc_agent.py,在SFC UI界面进行添加SF,SFF,SN:在部署SFC时,最后点击部署图标,sfc_agent.py报错如下: ...