认识Shell

什么是 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
2
3
#!/bin/bash
# This is a shell-script
echo "Hello world!"
  • 第 1 行很重要,它给 shell 一个很重要的线索,告诉它用什么程序来解释这个脚本,在这个列子中用的是 /bin/bash。其他脚本语言例如 perl、awk、python 等都是采用这种机制。

  • 第 2 行是注释,在 # 符号后面的东西,bash 都视而不见给忽略掉。

  • 第 3 行就是 shell 脚本要执行要解释的指令了。

  • 第 1 行和第 2 行都是 # 号开头,区别在于第 1 行的 # 号后面接着一个 ! 号,这个就是脚本解释程序的声明指令,由调用这个脚本的 shell 来检测。它仅在脚本程序的第一行有效

执行 Shell 脚本的方式

  • 用法
1
2
3
$ bash [OPTIONS] firsh.sh
-n:测试脚本是否有语法错误
-x:显示脚本执行的详细过程
  • 示例
1
2
3
# 直接执行脚本文件或在当前路径下执行,脚本需要有执行权限;
$ /etc/rc.d/init.d/network
$ ./firsh.sh
有钱任性,请我吃包辣条
0%