什么是 Shell
Shell 也可称为“壳”,充当人与内核(硬件)的翻译官,用户将一些命令 “告诉” Shell,它就会调用相应的程序服务执行工作。因此 Shell 的最简单的定义就是—命令解释器(Command Interpreter)
Shell 将使用者的命令翻译给核心处理,同时将核心处理结果翻译给使用者。每次完成系统登入(login),就会取得一个互动模式的 shell ,也称为 login shell 或 primary shell。
如果从进程(process)角度看,我们在 shell 所下达的命令,均是 shell 所产生的子进程,这种现象可称为 fork
如果是执行脚本(shell script)的话,脚本中的命令则是由另外一个非互动模式的子 shell (sub shell)来执行的。也就是 primary shell 产生 sub shell 的进程,sub shell 再产生 script 中所有命令的进程。
kernel 与 shell 是不同的两套软件,而且都是可以被替换的,不同的操作系统使用不同的 kernel,在同一个 kernel 之上也可使用不同的 shell
在 linux 的预设系统中,通常都可以找到好几种不同的 shell ,且通常会被列于 /etc/shells
当中。不同的 shell 有着不同的功能,且也彼此各异、或说”大同小异”。
常见 Shell 分类
主要分为两大主流:sh 和 csh。
sh 分为 burne shell (sh) 和 burne again shell (bash)。大部分的 Linux 系统的预设 shell 都是 bash 这是因为它是自由软件,并且功能强大
csh 分为 c shell (csh)、tc shell (tcsh)、korn shell (ksh)
Shell 和其他语言的差别
严格意义上讲,Shell 不属于编程语言,Shell 脚本是由命令的堆砌而成。Shell 的优势在于处理操作系统底层的业务,一键安装、报警脚本,常规的业务应用,并且开发简单高效。
其他语言类似 php、 Python 是严格意义上的编程语言,优势在于开发运维工具,web界面的管理工具等
Shell 脚本基本格式
1 |
|
第 1 行很重要,它给 shell 一个很重要的线索,告诉它用什么程序来解释这个脚本,在这个列子中用的是 /bin/bash。其他脚本语言例如 perl、awk、python 等都是采用这种机制。
第 2 行是注释,在
#
符号后面的东西,bash 都视而不见给忽略掉。第 3 行就是 shell 脚本要执行要解释的指令了。
第 1 行和第 2 行都是
#
号开头,区别在于第 1 行的#
号后面接着一个!
号,这个就是脚本解释程序的声明指令,由调用这个脚本的 shell 来检测。它仅在脚本程序的第一行有效
执行 Shell 脚本的方式
- 用法
1 | $ bash [OPTIONS] firsh.sh |
- 示例
1 | # 直接执行脚本文件或在当前路径下执行,脚本需要有执行权限; |