Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序。
当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shell(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。
当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell解释用户输入的命令,就象DOS里的command.com所做的一样,所不同的是,在DOS中,command.com只有一个,而在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。
目前流行的shell有ash, bash, ksh, csh, zsh等,可以使用下面的命令查看自己的shell类型:
$SHELL是一个环境变量,记录了用户使用的shell类型。
可以使用命令切换到别的shell
#shell-name
使用不同的shell在于它们有各自的特点。
bash是linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。linux默认使用bash是应为它有注入如下的特色:
ash shell是由Kenneth Almquist编写的,linux中占用资源最小的一个shell,它只包含了24个内部命令,因而使用起来很不方便。
ksh是Korn Shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不花钱购买商业版本的情况下尝试商业版本的功能了。
csh是linux比较大的内核,它由Wiiliam Joy为代表的共计47位坐着编成,共有52个内部命令。该shell其实是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是tcsh
zsh是linux最大的shell之一,由Paul Falstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的shell
一般而言,Shell Script的地位和其它的可执行文件(或命令)是完全相同的,只不过Shell Script是以文字档的方式储存,而非二进位档。而执行Shell Script时,必须有一个程序将其内容转成一道道的命令执行,而这个程式其实就是Shell ,这也就是为什么我们叫做Shell Script的原因。
不同Shell 的Script基本上会有一些差异,所以我们不能将写给A shell 的Script用B shell 执行。
将文件设置成为可执行文件,使用下面的命令为用户添加可执行权限:
chomd u+x filename 当前用户可执行 chmod ug+x filename 当前用户组可执行 chomod +x filename 所有用户可执行
建议使用第三种方式指定shell,以确保所执行的就是所要的。bash的路径名称为 /bin/bash
除了在script文件内指定所使用的shell外,也可以在命令行中指定,不如要用csh执行某个script,可以使用命令:
#csh filename
通过输入 ./filename 来执行脚本文件。
script是以行为单位。我们所写的script会被分解成一行一行来执行。而每一行是命令,注解,或是流程控制指令等。如果一行尚未完成,可以在行末加上 \ ,这个时候下一行的内容就会接到这一行的后面,成为同一行。
当script中出现 # 时,在它后面的同一行蚊子即为注释,shell不会对其解释。
script的流程控制和一些一般的高级语言的流程控制没有什么两样。
执行命令时也需要设定一些变量。