# 1.什么是Shell?
Shell是在Linux/UNIX下的命令解释型语言(command-language interpreter),它的中文翻译为“壳”主要是用于人机交互,以下截图为macOS中的Bash终端。
![](/assets/WX20180912-120240.png)
我们再来看一下Shell在Linux/UNIX系统中的一个位置。从技术的角度来说Shell是一个使用者与系统的交互界面\(interface\), 只能让使用者通过命令行\(command line\)来使用系统来完成工作。 因此,Shell最简单的定义就是----命令解释器\( Command Interpreter\):
* 将使用者的命令翻译给kernel来处理;
* 同时,将kernel的处理结果翻译给使用者。
Linux\UNIX系统体系结构图,图1。
![](/assets/1.png)
# 2.Shell的种类
Linux/UNIX Shell的种类很多,目前流行的Shell包括ash、bash、ksh、csh、zsh等,用户可以通过查看/etc/shells 文件中的内容来查看自己主机中当前有哪些种类的Shell。
```
cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
```
不同种类Shell间的历史背景:
* BourneShell\(sh\):是由AT&T Bell实验室的 Steven Bourne为AT&T的Unix开发的,它是Unix的默认Shell,也是其它Shell的开发基础,Bourne Shell在编程方面相当优秀,但在处理与用户的交互方面不如其它几种Shell。
* BourneAgain Shell \(即Bash\):是自由软件基金会\(GNU\)开发的一个Shell,它是Linux系统中一个默认的Shell。Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。
* ash:ash Shell是由Kenneth Almquist编写的,是Linux 中占用系统资源最少的一个小Shell,它只包含24个内部命令,因而使用起来很不方便。
* CShell\(csh\):是加州伯克利大学的Bill Joy为BSD Unix开发的,共有52个内部命令,与sh不同,它的语法与C语言很相似。它提供了Bourne Shell所不能处理的用户交互特征,如命令补全、命令别名、历史命令替换等。但是,C Shell与BourneShell并不兼容。该Shell其实是指向/bin/tcsh这样的一个Shell,也就是说,csh其实就是tcsh。
* KornShell\(ksh\):是AT&T Bell实验室的David Korn开发的,共有42 条内部命令,它集合了C Shell和Bourne Shell的优点,并且与Bourne Shell向下完全兼容。Korn Shell的效率很高,其命令交互界面和编程交互界面都很好。
* zch:是Linux 最大的Shell之一,由Paul Falstad完成,共有84 个内部命令。如果只是一般的用途,没有必要安装这样的Shell。
大部分的Linux操作系统的预设Shell都是bash,其原因大致如下两种:
* 自由软件
* 功能强大 Bash是gnu project最成功的产品之一,自推出以来深受广大Linux/UNIX用户的喜爱, 且也逐渐成为不少组织的系统标准。
而目前互联网公司主流操作系统是CentOS,他默认的Shell就是Bash所以我们课程以介绍Bash为主,如果期间谈到其他Shell会以注释方式提示读者。
- Introduction
- 1.Shell编程基础
- 什么是Shell
- 编写第一个Bash程序
- 2.变量
- 什么是变量
- 变量四种赋值方式
- 指定变量类型
- 变量的类型
- 特殊变量
- 3.Bash符号相关
- Bash符号相关
- 特殊符号
- 数学运算符号
- 4.内建命令与外部命令
- 内建命令与外部命令
- 5.read命令
- read命令
- 6.条件语句
- if..then..fi
- if..then..else..fi
- if..then..elif..fi
- 空命令
- 文件测试符
- 字符串判断、与、或和非
- []与[[]]符号
- 7.Bash循环 && 分支语句
- while循环语句
- for循环
- for..in循环
- until循环
- select循环
- case分支语句
- 8.正则表达式
- 正则表达式
- 9.子Shell和受限Shell
- 子Shell
- 受限Shell
- 10.函数与函数的加载
- 函数语法与案例
- 递归函数
- 函数的加载
- 11.Bash脚本风格
- Bash脚本风格
- 12.Bash脚本调试
- Bash脚本调试
- 13.sed && awk
- sed
- 14.awk
- awk
- 15 Bash杂项 && 案例
- while循环的陷阱
- Bash的生命周期
- IO重定向
- /bin/bash和/bin/sh区别
- 命令杂项
- Shell加密
- 16.10.2.案例
- Bash版回收站
- 17.Bash中文速查表
- 中文速查表