【Unix/Linux.Shell Script】Shell & Shell Script

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序。

Shell

当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shell(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。

当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell解释用户输入的命令,就象DOS里的command.com所做的一样,所不同的是,在DOS中,command.com只有一个,而在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。

几种流行的Shell

目前流行的shell有ash, bash, ksh, csh, zsh等,可以使用下面的命令查看自己的shell类型:



$SHELL是一个环境变量,记录了用户使用的shell类型。

可以使用命令切换到别的shell

#shell-name


这里shell-name是想要使用的别的shell的名称,如ksh等,这个命令为用户又启动了一个shell,这个shell在最初登陆的那个shell之后,称为下级的shell或子shell,使用命令exit可以退出这个子shell命令:



使用不同的shell在于它们有各自的特点。


  • bash

bash是linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。linux默认使用bash是应为它有注入如下的特色:

    • 可以使用类似DOS下面的doskey功能,用方向键查阅和快速输入并修改命令
    • 自动通过查找匹配的方式给出以某字符串开头的命令(使用TAB键自动完成输入)
    • 包含了自身的帮助功能,只要在提示符下面键入help就可以得到相关的帮助
  • ash

ash shell是由Kenneth Almquist编写的,linux中占用资源最小的一个shell,它只包含了24个内部命令,因而使用起来很不方便。

  • ksh

ksh是Korn Shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不花钱购买商业版本的情况下尝试商业版本的功能了。

  • csh

csh是linux比较大的内核,它由Wiiliam Joy为代表的共计47位坐着编成,共有52个内部命令。该shell其实是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是tcsh

  • zsh

zsh是linux最大的shell之一,由Paul Falstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的shell


Shell Script

一般而言,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来解释缩写的Script

  • 如果script的第一个非空白字符不是#,则它会使用bash shell
  • 如果script的第一个非空白字符是#时,但不以#!开头,则它会使用 C Shell
  • 如果script的以#!开头,则#!后面所写的就是所使用的shell,而且要将整个路径名称指出来

建议使用第三种方式指定shell,以确保所执行的就是所要的。bash的路径名称为 /bin/bash



除了在script文件内指定所使用的shell外,也可以在命令行中指定,不如要用csh执行某个script,可以使用命令:

#csh filename

此时,script文件的存取方式就不一定为可执行文件,其内部所指定的shell也会失效。


执行shell script脚本

通过输入 ./filename 来执行脚本文件。


shell script的基本结构

script是以行为单位。我们所写的script会被分解成一行一行来执行。而每一行是命令,注解,或是流程控制指令等。如果一行尚未完成,可以在行末加上 \ ,这个时候下一行的内容就会接到这一行的后面,成为同一行。

当script中出现 # 时,在它后面的同一行蚊子即为注释,shell不会对其解释。

script的流程控制和一些一般的高级语言的流程控制没有什么两样。

执行命令时也需要设定一些变量。





你可能感兴趣的:(shell,script)