shell既是命令解释程序,又是一种高级程序设计语言。shell是解释型语言,这使得调试工作比较容易进行,因为你可以逐行地执行指令,而且节省了重新编译的时间。然而,这也使得shell不适合用来完成时间紧迫型和处理器忙碌型的任务。一个shell程序(又称为shell脚本),包含了要由shell执行的命令并存放在普通的Linux文件中。shell允许使用一些读写存储区,为用户和程序设计人员提供一个暂存数据的区域,这通常被称为shell变量。shell也提供程序流程控制命令,称为语句,它提供了对shell脚本中的命令进行非顺序 执行或循环执行的功能。
在Linux系统中,作为/bin/sh安装的标准shell是GNU工具集中的bash (GNU Bourne-Again Shell)。因为它作为一个优秀的shell,总是安装在Linux系统上,而且它是开源的,并且可以被移植到几乎所有的类Unix系统上。在大多数Linux发行版中,默认的shell程序/bin/sh实际上是对程序/bin/bash的一个符号链接。
编写bash脚本程序有两种方式。你可以输入一系列命令让bash交互地执行它们,也可以把这些命令保存到一个文本文件中,然后将该文件作为一个程序来调用。
bash程序的每一行既可以是bash语句,又可以是bash命令。建立bash脚本文件的步骤与建立文本文件相同,使用vi、emacs、gedit等各种编辑器都可以生成bash脚本 文件。下面是一个简单bash脚本:
程序中的注释行以#符号开始,一直持续到该行的结束。程序中第一行#!/bin/bash,它是注释语句的一种特殊形式,#!字符告诉系统同一行上紧跟在它后面的那个参数是用来执行本文件的程序。在这个例子中,/bin/bash是默认的shell程序。
上面例子脚本文件名中,没有使用任何的文件扩展名或后缀。一般情况下,Linux 和Unix很少利用文件扩展名来决定文件的类型。大多数预安装的脚本程序并没有使用任何文件扩展名,检査这些文件是否是脚本程序的最好方法是使用file命令,例如,file scpl。
运行脚本文件有两种基本方法。第一种方法是运行/bin/bash命令并且把脚本文件名作为它的参数。下面的命令就执行scpl中的命令。如果你的搜索路径(PATH变量)中包含了/bin目录的话,可以简单地使用bash命令,而不是/bin/bash。如下所示:
第二种方法是为脚本文件夹上可执行的权限。显然,在这种情况下,脚本仅仅可以被 你自己执行。然而,如果你希望其他用户可以执行这个脚本,你需要为脚本设置合适的访问权限。
现在,你可以键入scpl作为一个命令来执行这个sheH脚本。注意,如果你的搜索路径(PATH变量)中没有包含当前目录那么在scpl前加上“./”。若这个脚本仅能在bash中顺利执行,而对于其他任何shell却都不行。在这种情况下,你可以执行/bin/bash命令,先运行bash。

