Chinaunix首页 | 论坛 | 博客
  • 博客访问: 714836
  • 博文数量: 165
  • 博客积分: 8218
  • 博客等级: 中将
  • 技术积分: 1749
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-07 19:48
文章分类

全部博文(165)

文章存档

2014年(4)

2011年(3)

2010年(6)

2009年(43)

2008年(109)

分类: LINUX

2008-12-17 16:01:21

4.执行Shell脚本的方式

执行Shell脚本的方式基本上有三种:

(1)输入定向到Shell脚本

这种方式是用输入重定向方式让Shell从给定文件中读入命令行并进行相应处理。其一般形式是:

$ bash < 脚本名

例如:

$ bash 

Shell从文件ex1中读取命令行,并执行它们。当Shell到达文件末尾时就终止执行,并把控制返回到Shell命令状态。此时,脚本名后面不能带参数。

(2)以脚本名作为参数

其一般形式是:

$ bash  脚本名  [参数]

例如:

$ bash  ex2   /usr/meng    /usr/zhang

其执行过程与上一种方式一样,但这种方式的好处是能在脚本名后面带有参数,从而将参数值传递给程序中的命令,使一个Shell脚本可以处理多种情况,就如同函数调用时可根据具体问题给定相应的实参。

如果以目前Shell(以·表示)执行一个Shell脚本,则可以使用如下简便形式:

$ · 脚本名 [参数]

以Shell脚本作为Shell的命令行参数,这种方式可用来进行程序调试。

(3)将Shell脚本的权限设置为可执行,然后在提示符下直接执行它。

通常用户是不能直接执行由正文编辑器(如vi)建立的Shell脚本的,因为直接编辑生成的脚本文件没有“执行”权限。如果要把Shell脚本直接当作命令执行,就需要利用命令chmod 将它置为有“执行”权限。例如,

$ chmod  a+x  ex2

就把Shell脚本ex2置为对所有用户都有“执行”权限。然后,在提示符后输入脚本名ex2就可直接执行该文件。注意,此时该脚本所在的目录应被包含在命令搜索路径(PATH)中。例如:

$ ex2

Shell接收用户输入的命令(脚本名),并进行分析。如果文件被标记为可执行的,但不是被编译过的程序,Shell就认为它是一个Shell脚本。 Shell将读取其中的内容,并加以解释执行。所以,从用户的观点看,执行Shell脚本的方式与执行一般的可执行文件的方式相似。

因此,用户开发的Shell脚本可以驻留在命令搜索路径的目录之下(通常是“/bin”、 “/usr/bin”等),像普通命令一样使用。这样,也就开发出自己的新命令。如果打算反复使用编好的Shell脚本,那么采用这种方式就比较方便。

Shell脚本经常被用来执行重复性的工作,例如,当进入系统时要查看有无信件、列出谁在系统中、将工作目录改到指定目录并予以显示、印出当前日期等。完 成这些工作的命令是固定的。为了减少录入时间,可把这些命令建立在一个Shell脚本中,以后每次使用该文件名就可执行这些工作。

另外,完成某些固定工作时需输入的命令很复杂,例如文件系统的安装(mount),要带多个选项和参数。此时,利用Shell脚本存放该命令,以后用时就很方便了。

Shell变量

Shell中也采用变量,用来存放字符串。Shell变量比C语言中的变量简单得多,没有众多存储类及类型的限制,也不需要预先定义、然后才能赋值,可以在使用时“现定义、现赋值”。

Shell有环境变量和临时变量。环境变量是永久性变量,其值不会随Shell脚本执行结束而消失。临时变量是在Shell程序内部定义的,其使用范围仅限于定义它的程序,出了本程序就不能再用它;而且当程序执行完毕,它的值也就不存在了。

1.用户定义的变量

用户定义的变量是最普通的Shell变量。变量名是以字母或下线符打头的字母、数字和下线符序列,并且大小写字母意义不同。如dir与Dir是不同的变量。这与C语言中标识符的定义相同。变量名的长度不受限制。

定义变量并赋值的一般形式是:

变量名=字符串

例如:

myfile=/usr/meng/ff/m1.c

注意,在赋值语句中,赋值号“=”的两边没有空格,否则在执行时会引起错误。

变量的值可以改变,只须利用赋值语句重新给它赋值即可。一个未明确赋过值的变量仅含一个空字符串。

在程序中使用变量的值时,要在变量名前面加上一个符号“$”。例如,

$ dir=/usr/meng/ff
$ echo $dir
/usr/meng/ff ←——— 显示结果
$ echo dir
dir ←——— 显示结果

如果在赋给变量的值中要含有空格、制表符或换行符,那么,就应该用双引号把这个字符串括起来。例如,

names="Zhangsan  Lisi  Wangwu"

可以将一个命令的执行结果赋值给变量。有两种形式的命令替换:一种是使用倒引号引用命令,其一般形式是: `命令表`。

例如:将当前工作目录的全路径名存放到变量dir中,输入以下命令行:

$ dir=`pwd`

另一种形式是:$(命令表)。上面的命令行也可以改写为:

$ dir=$(pwd)

阅读(753) | 评论(0) | 转发(0) |
0

上一篇:shell 编程

下一篇:shell 编程3

给主人留下些什么吧!~~