什么是 Shell
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 也是 Linux 的命令解释器,用于解释用户对操作系统的操作;Shell 会把用户所执行的命令翻译给 Linux 内核,Linux 内核将执行命令的结果反馈给用户。
比如 ls
命令,Shell 会分析 ls
命令中的选项和参数,然后将该命令交给文件管理器;文件管理器再去和硬盘打交道将返回结果,最终再反馈给用户;如果将 Shell 脚本编写好的话,用户就不用去编写驱动程序,也不用去开发 c 语言,这也就可以去控制内核,控制操作系统去实现自己想做的事情,不用去了解很多操作系统硬件相关的知识。
Shell 也有很多的版本,有 C shell、K shell、TCSH、zsh、ash、bash 等等,而 Linux 默认使用的 Shell 是 bash。
Shell 的分类
目前 Shell 的版本有很多种,如 BourneShell
、CShell
、Bash
、ksh
、tcsh
等,版本之间各有特点。
Shell 类别 | 易学性 | 可移植性 | 编辑性 | 快捷性 |
---|---|---|---|---|
Bourne Shell(sh) | 容易 | 好 | 较差 | 较差 |
Korn Shell(ksh) | 较难 | 较好 | 好 | 较好 |
Bourne Again (Bash) | 难 | 较好 | 好 | 好 |
POSIX Shell (psh) | 较难 | 好 | 好 | 较好 |
C Shell(csh) | 较难 | 差 | 较好 | 较好 |
TC Shell(tcsh) | 难 | 差 | 好 | 好 |
简要介绍一下后续文章所用到的的 Shell 版本。
BashShell 也就是 Bourne Again(Bash),是 GNU 计划的重要工具之一,也是 GNU 系统中标准的 Shell。Bash 与 sh 兼容,所以许多早期开发出来的 BourneShell 程序都可以继续在 Bash 中运行。现在使用的 Linux 就使用 Bash 作为用户的基本 Shell。
Bash 于 1988 年发布,并在 1995-1996 年推出 Bash2.0。在这之前,广为使用的版本是 1.14,Bash2.0 增加了许多新的功能,以乃且备更好的兼容性。
Shell 脚本的格式
Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、一键搭建 Web 开发环境、日志分析等,Shell 都非常合适。
使用 Shell 的熟练程度反映了用户对 Linux 的掌握程度,运维工程师、网络管理员、程序员都应该学习 Shell。
尤其是 Linux 运维工程师,Shell 更是必不可少的,是必须掌握的技能,它使得我们能够自动化地管理服务器集群,否则你就得一个一个地登录所有的服务器,对每一台服务器都进行相同的设置,而这些服务器可能有成百上千之多,会浪费大量的时间在重复性的工作上。
Shell也是一种编程语言,它的编译器(解释器)是Shelli这个程序。我们平时所说的Shell.,有时候是指连接用户和内核的这个程序,有时候又是指Shell编程。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,后续出现的 “shell编程” 都是指 shell 脚本编程,不是指开发 shell 自身。
Shell 脚本的格式和现在的编程语言结构很相似,它们都是自上而下执行命令的;在此过程中也会用到变量去临时存储一些数据,这些命令也不一定是顺序执行的,包括了判断和分支、以及循环、定时等功能。
Shell 脚本都有哪些元素构成呢?有 Sha-Bang
、注释、命令组成
Sha-Bang
脚本文件的后缀名一般是 .sh
当该脚本需要传给其他系统去执行,其他系统的默认 Shell 可能不是 bash,那我这个脚本能不能去执行呢?这就引出了 Shell 脚本的文件头格式,示例:
1 | vim demo.sh |
在以上的文件中可以发现,我在脚本的文件头添加了 #!/bin/bash
这一行命令,这一行命令被叫做 Sha-Bang
,也就意味着告诉执行脚本的系统,使用什么版本的 Shell 去执行该脚本,在本文件中使用 /bin/bash
去执行该脚本。
如果执行该脚本使用的是 bash demo.sh
命令,那么该 Sha-Bang
就会被当作注释;如果使用 ./demo.sh
方法去运行的话,因为不知道该系统默认的 Shell 版本,所以 Sha-Bang
就会被执行,告诉系统使用 /bin/bash
版本的 Shell 去执行该脚本。
注释
在 Shell 脚本文件中,注释是以 #
开头的,#
后面跟的就是该 Shell 脚本的注释。
命令
Shell 也是一种编程语言,虽然没有 C/C++、Java、Python 等强大。但也支持了基本的编程元素,例如:
if...else
选择结构、switch...case
开关语句、for、while、until
循环语句等[[Shell中的流程控制|流程控制]]语句。- [[Shell 中的变量|变量]]、数组、字符串、注释、加减乘除等常用[[Shell 中的常用运算符|运算]]等概念。
- 函数,包括用户自定义的函数和内置函数(例如 printf、export、eval 等)。
后续会详细展开以上部分。