05_外壳编程.pdf
《05_外壳编程.pdf》由会员分享,可在线阅读,更多相关《05_外壳编程.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载第5章 外 壳 编 程在DOS 中,你可能会从事一些例行的重复性命令,此时你会将这些重复性的命令写成批处理命令,只要执行这个批处理命令就等于执行这些命令。在 L i n u x系统中也有类似的批处理命令,它的功能比起D O S的批处理命令更为强大,相对也较为复杂,已经和一般的高级语言不相上下。这些批处理命令在L i n u x中叫做外壳脚本(外壳Script)。外壳脚本是以文本方式储存的,而非二进制文件。所以外壳脚本必须在 L i n u x系统的外壳下解释执行。不同外壳的脚本大多会有一些差异,所以我们不能将写给 A 外壳的脚本用B 外壳执行。而在L i n u x系统中大家最常使用是Bo
2、urne 外壳以及C 外壳,所以本章结合这两个外壳的相同点和不同点来介绍外壳编程。5.1 创建和运行外壳程序5.1.1 创建外壳程序你可以用任何的编辑器编辑外壳程序,只需将要执行的外壳或 L i n u x命令写入外壳程序即可。例如,假设你的系统在启动时挂接有一台 CD-ROM 驱动器,而你想更换驱动器中的CD,并读取其中的内容。一种方法是:首先把想要读取的 CD 放入 CD-ROM 驱动器中,然后使用unmount 命令卸载CD-ROM 驱动器,最后再使用mount 命令挂接CD-ROM 驱动器。命令如下:umount/dev/cdrommount-t iso9660/dev/cdrom/c
3、drom你可以创建一个包含这两个命令的文件名为 remount 的外壳程序,而不必在每次更换 C D都重复执行这两个命令。5.1.2 运行外壳程序如何运行我们已经写好的外壳脚本呢?可以有四种方法,下面分别介绍这几种方法:1.可以把外壳脚本的权限设置为可执行,这样就可以在外壳提示符下直接执行。我们可以使用下列命令更改外壳脚本的权限chmod u+x filename只有自己可以执行,其他人不能执行。chmod ug+x filename只有自己以及同一工作组的人可以执行,其他人不能执行。chmod+x filename所有人都可以执行。而我们如何指定使用哪一个外壳来解释执行外壳脚本呢?几种基本的
4、指定方式如下所述1)如果外壳脚本的第一个非空白字符不是“#”,则它会使用Bourne 外壳。2)如果外壳脚本的第一个非空白字符是“#”,但不以“#!”开头时,则它会使用C 外壳。3)如果外壳脚本以“#!”开头,则“#!”后面所跟的字符串就是所使用的外壳的绝对路径第二篇L i n u x高级语言及管理编程名。Bourne 外壳的路径名称为/bin/sh,而C 外壳则为/b i n/c s h。例如:1)如使用Bourne 外壳,可用以下方式:echo enter filename或者#!/bin/sh 2)如使用C 外壳,可用以下方式:#C 外壳S c r i p t或者#!/b i n/c s
5、 h3)如使用/etc/perl 作为外壳,可用以下方式:#!/etc/perl 2.第二种方法是执行外壳脚本想要执行的外壳,其后跟随外壳脚本的文件名作为命令行参数。例如,使用tcsh 执行上面的外壳脚本:tcsh remount此命令启动一个新的外壳,并令其执行remount 文件。3.第三种方法是在pdksh 和b a s h下使用.命令,或在t c s h下使用source 命令。例如,在p d k s h和b a s h下执行上面的外壳脚本:.r e m o u n t或在t c s h下执行上面的外壳脚本:source remount4.第四种方法是使用命令替换。这是一个相当有用的方
6、法。如果想要使某个命令的输出成为另一个命令的参数时,就可以使用这个方法。我们将命令列于两个 号之间,而外壳会以这个命令执行后的输出结果代替这个命令以及两个 符号。例如:str=Current directory is pwdecho$str结果如下Current directory is/users/cc/mgtsai在上面的例子中,pwd 这个命令输出/u s e r s/c c/m g t s a i,而后整个字符串代替原来的p w d设定str 变量,所以str 变量的内容则会包括pwd 命令的输出。5.2 使用外壳变量就像其他的任何高级语言一样,在外壳脚本中使用变量也是十分重要的。5.
7、2.1 给变量赋值在pdksh 和b a s h中,给变量赋值的方法是一样的,既在变量名后跟着等号和变量值。例如,想要把5赋给变量c o u n t,则使用如下的命令:count=5 (注意,在等号的两边不能有空格)在t c s h中,可以使用如下的命令:set count=5因为外壳语言是一种不需要类型检查的解释语言,所以在使用变量之前无须事先定义,这36计计第二篇 Linux高级语言及管理编程下载和C 或 P a s c a l语言不一样。这也说明你可以使用同一个变量来存储字符串或整数。给字符串赋值的方法和给整数赋值的方法一样。例如:n a m e=G a r r y(在pdksh 和b
8、a s h中)set name=Garry(在t c s h中)5.2.2 读取变量的值可以使用$读取变量的值。例如,用如下的命令将 count 变量的内容输出到屏幕上:echo$count5.2.3 位置变量和其他系统变量位置变量用来存储外壳程序后面所跟的参数。第一个参数存储在变量 1中,第二个参数存储在变量2中,依次类推。这些变量为系统保留变量,所以你不能为这些变量赋值。同样,你可以使用$来读取这些变量的值。例如,你可以编写一个外壳程序 r e v e r s e,执行过程中它有两个变量。输出时,将两个变量的位置颠倒。#program reverse,prints the command
9、line parameters out in reverse orderecho$2$1在外壳下执行此外壳程序:reverse hello there其输出如下:there hello除了位置变量以外,还有其他的一些系统变量,下面分别加以说明:有些变量在启动外壳时就已经存在于系统中,你可以使用这些系统变量,并且可以赋予新值:$HOME 用户自己的目录。$PATH 执行命令时所搜寻的目录。$TZ 时区。$MAILCHECK 每隔多少秒检查是否有新的邮件。$P S 1在外壳命令行的提示符。$P S 2当命令尚未打完时,外壳要求再输入时的提示符。$M A N PATHman 指令的搜寻路径。有些变量
10、在执行外壳程序时系统就设置好了,并且你不能加以修改:$#存储外壳程序中命令行参数的个数。$?存储上一个执行命令的返回值。$0存储外壳程序的程序名。$*存储外壳程序的所有参数。“$”存储所有命令行输入的参数,分别表示为(“$1”“$2”.)。$存储外壳程序的P I D。$!存储上一个后台执行命令的P I D。5.2.4 引号的作用在外壳编程中,各种不同的引号之间的区别是十分重要的。单引号()、双引号(“”)和第5章计外 壳 编 程计计37下载反斜杠()都用作转义。这三者之中,双引号的功能最弱。当你把字符串用双引号括起来时,外壳将忽略字符串中的空格,但其他的字符都将继续起作用。双引号在将多于一个单
11、词的字符串赋给一个变量时尤其有用。例如,把字符串hello there赋给变量g r e e t i n g时,应当使用下面的命令:greeting=hello there(在 bash 和p d k s h环境下)set greeting=hello there(在 t c s h环境下)这两个命令将hello there作为一个单词存储在greeting 变量中。如果没有双引号,bash 和p d k s h将产生语法错,而t c s h则将hello 赋给变量greeting。单引号的功能则最强。当你把字符串用单引号括起来时,外壳将忽视所有单引号中的特殊字符。例如,如果你想把登录时的用户
12、名也包括在 g r e e t i n g变量中,应该使用下面的命令:greeting=hello there$LOGNAME(在 bash 和p d k s h环境下)set greeting=hello there$LOGNAME(在 t c s h环境下)这将会把hello there root存储在变量greeting 中,如果你是以root 身份登录的话。但如果你在上面使用单引号,则单引号将会忽略$符号的真正作用,而把字符串hello there$LOGNAME存储在greeting 变量中。使用反斜杠是第三种使特殊字符发生转义的方法。反斜杠的功能和单引号一样,只是反斜杠每次只能使一
13、个字符发生转义,而不是使整个字符串发生转义。请看下面的例子:greeting=hello there (在b a s h和p d k s h环境下)set greeting=hello there (在t c s h环境下)在命令中,反斜杠使外壳忽略空格,从而将hello there作为一个单词赋予变量g r e e t i n g。当你想要将一个特殊的字符包含在一个字符串中时,反斜杠就会特别地有用。例如,你想把一盒磁盘的价格$5.0 0赋予变量d i s k _ p r i c e,则使用如下的命令:d i s k _ p r i c e=$5.0 0(在 bash 和p d k s h环境
14、下)set disk_price=$5.00(在t c s h环境下)如果没有反斜杠,外壳就会试图寻找变量5,并把变量5的值赋给d i s k _ p r i c e。5.3 数值运算命令如果需要处理数值运算,我们可以使用 e x p r命令,下面列出可以使用的数值运算符及其用法:expr expression说明:e x p r e s s i o n是由字符串以及运算符所组成的,每个字符串或是运算符之间必须用空格隔开。下面列出了运算符的种类及功能,运算符的优先顺序以先后次序排列,可以利用小括号来改变运算的优先次序。其运算结果输出到标准输出设备上。:字符串比较。比较的方式是以两字符串的第一个
15、字母开始,以第二个字符串的最后一个字母结束。如果相同,则输出第二个字串的字母个数,如果不同则返回 0。*乘法/除法 取余数+加法-减法 小于38计计第二篇 Linux高级语言及管理编程下载=大于等于 大于&AND运算|OR运算注意当expression中含有*、(、)等符号时,必须在其前面加上,以免被外壳解释成其他意义。例如:expr 2*(3+4)输出结果为1 4。t e s t命令在bash 和p d k s h环境中,t e s t命令用来测试条件表达式。其用法如下:test expression或者 expression t e s t命令可以和多种系统运算符一起使用。这些运算符可以分
16、为四类:整数运算符、字符串运算符、文件运算符和逻辑运算符。1)整数运算符int1-eq int2 如果int1 和i n t 2相等,则返回真。int1-ge int2 如果int1 大于等于i n t 2,则返回真。int1-gt int2 如果int1 大于i n t 2,则返回真。int1-le int2 如果i n t 1小于等于i n t 2,则返回真。int1-lt int2 如果i n t 1小于i n t 2,则返回真。int1-ne int2 如果int1 不等于i n t 2,则返回真。2)字符串运算符str1=str2 如果str1 和s t r 2相同,则返回真。str
17、1!=str2 如果str1 和s t r 2不相同,则返回真。str 如果str 不为空,则返回真。-n str 如果str 的长度大于零,则返回真。-z str 如果str 的长度等于零,则返回真。3)文件运算符-d filename 如果filename 为目录,则返回真。-f filename 如果filename 为普通的文件,则返回真。-r filename 如果filename 可读,则返回真。-s filename 如果filename 的长度大于零,则返回真。-w filename 如果filename 可写,则返回真。-x filename 如果filename 可执行,则
18、返回真。4)逻辑运算符!expr 如果expr 为假,则返回真。第5章计外 壳 编 程计计39下载expr1-a expr2如果expr1 和e x p r 2同时为真,则返回真。expr1-o expr2如果expr1 或 e x p r 2有一个为真,则返回真。t c s h中没有t e s t命令,但它同样支持表达式。t c s h支持的表达式形式基本上和 C语言一样。这些表达式大多数用在if 和w h i l e命令中。t c s h表达式的运算符也分为整数运算符、字符串运算符、文件运算符和逻辑运算符四种。1)整数运算符int1=int2 如果int1 大于等于i n t 2,则返回真
19、。int1 int2 如果int1 大于i n t 2,则返回真。2)字符串运算符str1=str2如果str1 和s t r 2相同,则返回真。str1!=str2如果str1 和s t r 2不相同,则返回真。)文件运算符-r file如果f i l e可读,则返回真。-w file如果f i l e可写,则返回真。-x file如果f i l e可执行,则返回真。-e file如果f i l e存在,则返回真。-o file如果当前用户拥有file,则返回真。-z file如果file 长度为零,则返回真。-f file如果file 为普通文件,则返回真。-d file如果file 为目
20、录,则返回真。4)逻辑运算符exp1|exp2 如果exp1 为真或exp2 为真,则返回真。exp1&exp2 如果exp1 和e x p 2同时为真,则返回真。!exp 如果exp 为假,则返回真。5.4 条件表达式b a s h、p d k s h和tcsh 都有两种条件表达方法,即if 表达式和case 表达式。5.4.1 if 表达式b a s h、p d k s h和tcsh 都支持嵌套的if.then.else 表达式。bash 和pdksh 的if 表达式如下:if expression t h e nc o m m a n d selif expression2 t h e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 05 外壳 编程
限制150内