『忘了再学』Shell基础 — 2、Shell的作用与分类
1、Shell的作用
Shell除了能解释用户输入的命令,将它传递给内核,还可以:
- 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果。
- 在多个程序之间传递数据,把一个程序的输出作为另一个程序的输入。
- Shell本身也可以被其他程序调用。
由此可见,Shell是将内核、程序和用户连接了起来。
Shell本身支持的命令并不多,但是它可以调用其他的程序,每个程序就是一个命令,这使得Shell命令的数量可以无限扩展,其结果就是Shell的功能非常强大,完全能够胜任 Linux 的日常管理工作,如文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、抓取网页内容、压缩文件等。
Shell并不是简单的堆砌命令,我们还可以在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的熟练程度反映了用户对 Linux 的掌握程度,运维工程师、网络管理员、程序员都应该学习Shell。
尤其是 Linux 运维工程师,Shell更是必不可少的,是必须掌握的技能,它使得我们能够自动化地管理服务器集群,否则你就得一个一个地登录所有的服务器,对每一台服务器都进行相同的设置,而这些服务器可能有成百上千之多,会浪费大量的时间在重复性的工作上。
2、Shell的分类
目前Shell的版本有很多种,如BourneShell、CShell、Bash、ksh、tcsh等,它们各有特点。
如下图所示:

下面简要介绍几个重点的Shell版本。
- 最重要的Shell是
BourneShell,这个命名是为了纪念此Shell的发明者Steven Bourne。从 1979 年起,UNIX 就开始使用BourneShell。BourneShell的主文件名为sh,开发人员便以sh作为BourneShell的主要识别名称。
虽然 Linux 与 UNIX 一样,可以支持多种Shell,但BourneShell的重要地位至今仍然没有改变,许多 UNIX 系统中仍然使用sh作为重要的管理工具。它的工作从开机到关机,几乎无所不包。在Linux中,用户Shell主要是 Bash,但在启动脚本、编辑等很多工作中仍然使用BourneShell。 CShell是广为流行的Shell变种。CShell主要在 BSD 版的 UNIX系统中使用,发明者是柏克莱大学的Bill Joy。CShell因为其语法和C语言类似而得名,这也使得UNIX的系统工程师在学习CShell时感到相当方便。BashShell也就是Bourne Again (Bash), 是 GNU 计划的重要工具之一,也是 GNU 系统中标准的Shell。Bash 与 sh 兼容,所以许多早期开发出来的BourneShell程序都可以继续在 Bash 中运行。现在使用的 Linux 就使用 Bash 作为用户的基本Shell。
Bash 于 1988 年发布,并在 1995-1996年推出Bash 2.0。在这之前,广为使用的版本是1.14,Bash 2.0增加了许多新的功能,以及具备更好的兼容性。
总结:
Shell的两种主要语法类型有
Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh(Bash和zsh在不同程度上支持csh的语法)。
参考:
『忘了再学』Shell基础 — 2、Shell的作用与分类的更多相关文章
- 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)
提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...
- 『忘了再学』Shell基础 — 20、Shell中的运算符
目录 1.Shell常用运算符 2.Shell中数值运算的方法 (1)方式一 (2)方式二 (3)方式三(推荐) 1.Shell常用运算符 Shell中常用运算符如下表: 优先级数值越大优先级越高,具 ...
- 『忘了再学』Shell基础 — 12、用户自定义变量
目录 1.变量定义 2.变量调用 3.变量的修改 4.查看变量 (1)-u选项说明: (2)-x选项说明: (3)set命令说明: 5.变量删除 1.变量定义 变量正确定义. 格式:变量名=" ...
- 『忘了再学』Shell基础 — 3、echo命令的介绍与使用
目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...
- 『忘了再学』Shell基础 — 24、Shell正则表达式的使用
目录 1.正则表达式说明 2.基础正则表达式 3.练习 (1)准备工作 (2)*练习 (3).练习 (4)^和$练习 (5)[]练习 (6)[^]练习 (7)\{n\}练习 (8)\{n,\}练习 ( ...
- 『忘了再学』Shell基础 — 25、扩展正则表达式
目录 1.扩展正则表达式说明 2.练习 (1)+和?练习 (2)|和()练习 3.注意(重点) 1.扩展正则表达式说明 熟悉正则表达式的童鞋应该很疑惑,在其他的语言中是没有扩展正则表达式说法的,在Sh ...
- 『忘了再学』Shell基础 — 30、sed命令的使用
目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...
- 『忘了再学』Shell基础 — 1、Shell的介绍
目录 1.Shell的由来 2.Shell的两种执行指令方式 3.什么是Shell脚本 4.Shell 是一种脚本语言 1.Shell的由来 我们比较熟悉Windows系统的图形化界面,对于图形界面来 ...
- 『忘了再学』Shell基础 — 4、Bash基本功能(history命令)
目录 1.history历史命令 2.设置命令历史记录的条数 3.清空历史命令 4.历史命令的调用 5.命令与文件的补全 在Linux系统中默认的Shell就是Bourne-AgainShell(简称 ...
随机推荐
- [cf1209E]Rotate Columns
题意也可以理解为这样一个过程: 对于每一列,将其旋转后选出若干行上的数,要求与之前的行都不同 用$g_{i,S}$表示第$i$列选出的行数集合为$S$的最大和,$f_{i,S}$表示前$i$列$S$中 ...
- [loj3341]时代的眼泪
题意即求在区间$[l,r]$中且权值在$[x,y]$中的逆序对个数 考虑分块,逆序对个数包含4部分: 1.左/右块外内部,预处理出$i$到其所在块的块首/尾,小于/小于等于$j$(需要对$j$离散)的 ...
- [源码解析] PyTorch 分布式(10)------DistributedDataParallel 之 Reducer静态架构
[源码解析] PyTorch 分布式(10)------DistributedDataParallel之Reducer静态架构 目录 [源码解析] PyTorch 分布式(10)------Distr ...
- layui的下拉-多选
网址: https://hnzzmsf.github.io/example/example_v4.html 1.下载代码: 2.整合layui 3.代码整合: <link rel="s ...
- CF1578J Just Kingdom
考虑一个点被填满则他需要从其父亲得到\(q_u = \sum_{v = u\ or\ v \in son_u}m_v\) 那么考虑如何这样操作. 我当时world final做的时候,是从上往下遍历, ...
- Hermite WENO 重构格式
Hermite WENO 单元重构 本文主要介绍采用 Hermite WENO 重构方法作为斜率限制器应用于二维或高维单元中. 1.简介[1] ENO格式最早由 Harten 等[2]提出,ENO格式 ...
- PHP面试经常被问cgi、fastcgi、php-fpm、mod_php的区别
cgi.fastcgi.php-fpm.mod_php cgi cgi是公共网关接口,用户通过浏览器来访问执行再服务器上的动态程序,CGI是Web 服务器与CGI程序间传输数据的标准.准确来说是一种协 ...
- 数据分析体系 — 用户粘性的两个计算指标(DAU/MAU和月人均活跃天数)
很多运营都了解DAU(日活跃用户数)和MAU(月活跃用户数)的重要性,但在某些情况下这两个数值本身并不能反映出太多问题,这个时候就要引用到[DAU/MAU]的概念,即[日活/月活] 用户粘性的两个计算 ...
- mysql 5.7 压缩包安装教程
前言 : 避免之前装的MySQL影响 首先进入dos窗口执行 sc delete mysql 删除已有的mysql服务 (一) 下载MySQL5.7 版本压缩包 网址 https://de ...
- MBean代码例子
public class ServerImpl { public final long startTime; public ServerImpl() { startTime = System.curr ...