《实验9 Shell编程.ppt》由会员分享,可在线阅读,更多相关《实验9 Shell编程.ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验实验9Shell编程编程1湖南第一师范学院湖南第一师范学院一.实验目的:1.了解了解UNIXshell的作用和主要分的作用和主要分类。2.了解了解Bourneshell(简称称sh)的一般的一般语法法规则。3.能能编写写简单的的shell程序程序2湖南第一师范学院湖南第一师范学院二.实验内容:1.Shell变量的定义及其使用。变量的定义及其使用。2.位置参数和环境变量。位置参数和环境变量。3.Shell中的特殊字符。中的特殊字符。4.一般控制结构。一般控制结构。3湖南第一师范学院湖南第一师范学院三、实验步骤一、一、Shell变量:量:Shell有两种有两种变量:量:环境境变量和量和临时变量
2、。在量。在Shell脚本脚本中中临时变量又分量又分为两两类:用:用户定定义的的变量和位置参数。量和位置参数。1.用用户定定义的的变量量用用户定定义的的变量是最普遍的量是最普遍的Shell变量,量,变量名是以字母量名是以字母或下化或下化线打打头的字母、数字和下的字母、数字和下线符序列,并且大小写字母意符序列,并且大小写字母意义不同。不同。变量名的量名的长度不度不受制。定受制。定义变量并量并赋值的一般形式是:的一般形式是:变量名量名=字符串字符串例如,例如,myfile=/usr/meng/ff/m1.c在程序中使用在程序中使用变量的量的值时,要在,要在变量名前面加上一个符量名前面加上一个符号号“
3、$”。这个符号告个符号告诉Shell,要,要读取取该变量的量的值。4湖南第一师范学院湖南第一师范学院(1)定定义并并显示示变量的量的值$dir=/usr/mengqc/file1$echo$dir/usr/mengqc/file1$echodirdir$today=Sunday$echo$today$TodaySunday$str=HapyNewYear!$echoWishYou$strWishYouHappyNewYear!5湖南第一师范学院湖南第一师范学院2)read命令命令作作为交互式交互式输入手段,可以利用入手段,可以利用read命令由命令由标准准输入(即入(即键盘)上上读取数据,然后
4、取数据,然后赋给指指定的定的变量。其一般格式是:量。其一般格式是:read变量量1变量量2.例如:例如:$readname-输入入read命令命令mengqc-输入入name的的值$echoYourNameis$name.YourNameismengqc-显示示输出的出的结果果$readabc-read命令有三个参数命令有三个参数crtvucnedu-输入三个字符串,中入三个字符串,中间以空格隔开以空格隔开$echoEmail:$a.$c.$bEmail:-显示示输出出结果果6湖南第一师范学院湖南第一师范学院利用利用read命令可交互式的命令可交互式的为变量两量两赋值。输入数据入数据时,数据,
5、数据间以空格或制表符作以空格或制表符作为分隔符分隔符。注意以下情况:。注意以下情况:*若若变量个数与量个数与给定数据个数相同,定数据个数相同,则依次依次对应赋值,如上面例子所示。如上面例子所示。*若若变量数少于数据个数,量数少于数据个数,则从左至右依次从左至右依次给变量量赋值,而最后一个,而最后一个变量取得所有余下数量取得所有余下数据的据的值。*若若变量个数多余量个数多余给定数据个数,定数据个数,则从左到右依次从左到右依次给变量量赋值,后面的,后面的变量没有量没有输入数据入数据与之与之对应时,其,其值就就为空串。空串。7湖南第一师范学院湖南第一师范学院2.位置参数位置参数执行执行Shell脚本
6、时可以使用参数。由出现命令行上的位置脚本时可以使用参数。由出现命令行上的位置确定的参数称做位置参数。在确定的参数称做位置参数。在sh中总共有十个位置参数,其对应的名称依次是中总共有十个位置参数,其对应的名称依次是$0,$1,$2,.$9。其中。其中$0始终表示命令名或始终表示命令名或Shell脚本名,对于一脚本名,对于一个命令行,必然有命令名,也个命令行,必然有命令名,也就必定有就必定有$0;而其它位置参数依据实际需求,可有可无。;而其它位置参数依据实际需求,可有可无。8湖南第一师范学院湖南第一师范学院(一)位置参数作用:(一)位置参数作用:(1)在你的)在你的计算机上建立以下三个文件(算机上
7、建立以下三个文件(设建立在目建立在目录/usr/username之下,其中之下,其中username表示你的主目表示你的主目录名):名):文件文件m1.c:main()printf(Beginn);文件文件m2.c:#includeprintf(OK!n);文件文件ex3:#ex3:shellscripttocombinefilesandcountlinescat$1$2$3$4$5$6$7$8$9|wc-l#end9湖南第一师范学院湖南第一师范学院(2)将将ex3改改为具有具有执行行权限:限:$chmod+xex3(3)利用利用env命令命令查看在看在环境境变量量PATH中是否包中是否包含你
8、的当前工作目含你的当前工作目录(即(即/usr/use-name)。如果没有包含在其中,)。如果没有包含在其中,则利用以下利用以下语句改句改变PATH的的值:$PATH=$PATH:/usr/usr/username(4)执行脚本行脚本ex3:$ex3m1.cm2.c10湖南第一师范学院湖南第一师范学院(二)(二)用用set设置位置参数值。设置位置参数值。(1)在你的工作目录中以下脚本文件在你的工作目录中以下脚本文件ex4:#ex4:shellscripttocombinefilesandcountlines#usingcommandsettosetpositionalparametersse
9、tm1.cm2.cecho$1echo$2echo$3cat$1$2$3|wc-l#end11湖南第一师范学院湖南第一师范学院(2)将将ex4改为具有执行权限:改为具有执行权限:$chmod+xex4(3)执行脚本执行脚本ex4:$ex4m1.cm2.c12湖南第一师范学院湖南第一师范学院(三)(三)利用位置参数给定变量赋值。利用位置参数给定变量赋值。(1)建立脚本建立脚本ex5,如下所示:,如下所示:n1=$1n2=$2n3=$3cat$n1$n2$n3|wc-l(2)将将ex5改为具有执行权限:改为具有执行权限:$chmod+xex5(3)执行脚本执行脚本ex5:$ex5m1.cm2.c1
10、3湖南第一师范学院湖南第一师范学院二、二、SHELL中的特殊字符中的特殊字符1.通配符通配符通常的通配符有三种:通常的通配符有三种:*星号,它匹配任意字符的星号,它匹配任意字符的0次或多次出次或多次出现。但注意,文件。但注意,文件名前面的名前面的圆点(点(.)和路径名中的斜)和路径名中的斜线(/)必)必须显示匹配。示匹配。?问号,它匹配任意一个字符。号,它匹配任意一个字符。一一对方括号,其中有一个字符方括号,其中有一个字符组。其作用是匹配。其作用是匹配该字符字符组所限定的任意一个字符。所限定的任意一个字符。应该注意:字符注意:字符*和和?在一?在一对方括号外面是通配符,若出方括号外面是通配符,
11、若出现在其内部,它在其内部,它们就失去通配符的能力了。就失去通配符的能力了。!叹号,若它号,若它紧跟在一跟在一对方括号的左方括号方括号的左方括号之后,之后,则表表示不在一示不在一对方括号中所列出的字符。方括号中所列出的字符。14湖南第一师范学院湖南第一师范学院2.引号引号在在SHELL中引号分中引号分为三种:三种:单引号、双引号、和倒引号。引号、双引号、和倒引号。(1)双引号)双引号由双引号括起来的字符,除由双引号括起来的字符,除$、倒引号和反斜、倒引号和反斜线()仍保留其功能外,)仍保留其功能外,其余字符通常作其余字符通常作为普通字符普通字符对待。待。例例9-81.建立以下文件建立以下文件e
12、x8:echocurrentdirectoryispwdechohomedirectoryis$HOMEechofile*.?echodirectory$HOME2.执行行ex8:$shex815湖南第一师范学院湖南第一师范学院(2)单引号引号由由单引号括起来的字符都作引号括起来的字符都作为普通字符出普通字符出现。(3)倒引号)倒引号例如:例如:$today=date$echoTodayis$todayTodayisThuMay0410:56:20CST2000$又如:又如:$users=who|wc-l$echoThenumberofusersis$usersThenumberofusers
13、is5$(4)反斜)反斜线转义字符,若想在字符串中使用反斜字符,若想在字符串中使用反斜线本身,本身,则必必须采用(采用()的形式,其中)的形式,其中第一个反斜第一个反斜线作作为转义字符,而把第二个反斜字符,而把第二个反斜线变为普通字符。普通字符。16湖南第一师范学院湖南第一师范学院三、三、控制控制结构构1.if语句句例例9-9(1)建立脚本)建立脚本ex9:echoThecurrentdirectoryispwdiftest-f$1thenecho$1isanordinaryfile.elseecho$1isnotanordinaryfile.fi17湖南第一师范学院湖南第一师范学院(2)执行
14、行ex9:$shex9ex1Thecurrentdirectoryis/usr/mengqcex1isanordinaryfile.if语句的句的else部分部分还可以是可以是else-if结构。构。(wj14)iftest-f$1thencat$1elseiftest-d$1then(cd$1;cat*)elseecho$1isneitherafilenoradirectory.fifi18湖南第一师范学院湖南第一师范学院如上例改写成如上例改写成为:iftest-f$1thencat$1eliftest-d$1then(cd$1;cat*)elseecho$1isneitherafileno
15、radirectory.fi19湖南第一师范学院湖南第一师范学院2.测试语句:句:有两种常用形式:一种是用有两种常用形式:一种是用test命令,如上所示。另一种是用一命令,如上所示。另一种是用一对方括号将方括号将测试条件括起来。条件括起来。两种形式完全等价。例如,两种形式完全等价。例如,测试位置参数位置参数$1是否是已存在的普通文件,可写成:是否是已存在的普通文件,可写成:test-f$1,也完全可写成:,也完全可写成:-f$l在格式上在格式上应注意,如果在注意,如果在test语句中使用句中使用shell变量,量,为表示完整、避免造成歧异起表示完整、避免造成歧异起见最好用最好用双引号将双引号将
16、变量括起来。利用一量括起来。利用一对方括号表示条件方括号表示条件测试时,在左方括号,在左方括号之后、右方括号之后、右方括号之之前各前各应有空格。有空格。例例9-10(1)建立脚本文件)建立脚本文件ex10echoEnteryourfilenamereadfilenaneif-f$filenamethencat$filenameelseif-d$filenamethencd$filenamels-l*elseecho$filename:badfilenamefifi(2)执行)执行ex10$shex1020湖南第一师范学院湖南第一师范学院3.while语句句例例9-11(1)建立脚本建立脚本ex
17、11:while$1doif-f$1thenechodisplay:$1cat$1elseecho$1isnotafilename.fishiftdone(2)执行行ex1121湖南第一师范学院湖南第一师范学院例例9-12(1)建立脚本)建立脚本ex12:echoleyinfile-creadfilenameechokeyindata:whilen$xdoreadxecho$x$filenamedonecat$filename(2)执行)执行ex12,并分析结果。,并分析结果。22湖南第一师范学院湖南第一师范学院4.for语句句例如:例如:(wj19)fordayinMondayWednesd
18、ayFridaySundaydoecho$daydone((例如:例如:(wj20)forfileinm*.cdocat$file|moredone23湖南第一师范学院湖南第一师范学院例例9-13(1)建立脚本)建立脚本ex13:#displayfilesunderagivendirectory#$1-thenameofthediectory#$2-theoffilesdir=$1;shiftif-d$dirthencd$dirfornamedoif-f$namethencat$nameechoEndof$dir/$nameelseechoInvalidfilename:$dir/$namefidoneelseechoBaddirectoryname:$dirfi$(2)执行执行ex13,并分析运行结果。,并分析运行结果。24湖南第一师范学院湖南第一师范学院实验报告、告、总结25