00. 目录
01. Shell 简介
02. Shell 分类
03. 交互式 shell 和非交互式 shell
04. 登录 shell 和非登录 shell
05. Shell 类型
06. 参考
00. 目录
@
参考博客: https://blog.csdn.net/dengjin20104042056/article/details/94669639
01. Shell 简介
在计算机科学中, Shell 俗称壳(用来区别于核), 是指 "为使用者提供操作界面" 的软件(命令解析器). 它类似于 https://baike.baidu.com/item/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 Windows manager (BlackBox 和 FluxBox), 以及功能更强大的 CDE,GNOME,KDE, XFCE.
第二类: 命令行式 shell(Command Line Interface shell , 即 CLI shell)
例如: bash / sh / ksh / csh(Unix/Linux 系统)
( https://baike.baidu.com/item/MS-DOS 系统) https://baike.baidu.com/item/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 基本上是一个命令解释器, 类似于 https://baike.baidu.com/item/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
- [[email protected] ~]$ echo $-
- himBH
非交互式 shell
- [email protected] ~]$ cat test.sh
- echo $-
- [[email protected] ~]$ ./test.sh
- hB
- [[email protected] ~]$
04. 登录 shell 和非登录 shell
登录 shell: 是需要用户名, 密码登录后才能进入的 shell(或者通过 "-login" 选项生成的 shell).
非登录 shell: 当然就不需要输入用户名和密码即可打开的 Shell, 例如: 直接命令 "bash" 就是打开一个新的非登录 shell, 在 Gnome 或 KDE 中打开一个 "终端"(terminal)窗口程序也是一个非登录 shell.
执行 exit 命令, 退出一个 shell(登录或非登录 shell); 执行 logout 命令, 退出登录 shell(不能退出非登录 shell).
- // 登录 shell
- [[email protected] ~]$ bash --login
- [[email protected] ~]$ logout
- // 登录 shell
- [[email protected] ~]$ bash --login
- [[email protected] ~]$ exit
登出
- // 非登录 shell
- [[email protected] ~]$ bash
- [[email protected] ~]$ logout
bash: logout: 不是登录 shell: 使用 `exit'
- [[email protected] ~]$ exit
- exit
- [[email protected] ~]$
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: 接下来你得到了一个像 "[email protected] />" 这样的提示符, 你输入什么, 它就解释出什么, 这就是交互式 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 类型
在 https://baike.baidu.com/item/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 是 https://baike.baidu.com/item/GNU 计划的一部分, 用来替代 Bourne shell. 它用于基于 GNU 的系统如 Linux. 大多数的 Linux(Red Hat,Slackware,Caldera)都以 bash 作为缺省的 shell, 并且运行 sh 时, 其实调用的是 bash.
POSIX Shell
POSIX shell 是 Korn shell 的一个变种. 当前提供 POSIX shell 的最大卖主是 https://baike.baidu.com/item/Hewlett-Packard . 在 HP-UX 11.0,POSIX shell 就是 / bin/sh, 而 https://baike.baidu.com/item/bsh 是 / usr/old/bin/sh.
各主要操作系统下缺省的 shell:
https://baike.baidu.com/item/AIX 下是 Korn Shell.
https://baike.baidu.com/item/Solaris 缺省的是 Bourne shell.
https://baike.baidu.com/item/FreeBSD 缺省的是 C shell
https://baike.baidu.com/item/HP-UX 缺省的是 POSIX shell.
https://baike.baidu.com/item/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)
来源: http://www.bubuko.com/infodetail-3118053.html