实训5Linuxshell编程汇总_第1页
实训5Linuxshell编程汇总_第2页
实训5Linuxshell编程汇总_第3页
实训5Linuxshell编程汇总_第4页
实训5Linuxshell编程汇总_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实训五 Linux shell编程【实习目的】掌握Linux shell的基本编程,包括:编程、调试与应用【实习指导】一、shell编程简介Linux shell是一个命令解释器,用来接受并执行命令(包括运行批处理文件和执行程序)。shell环绕在内核的外层,它是Linux操作系统和用户之间的界面。当用户从shell或其他程序向Linux传递命令,内核会做出相应的反应。这里,将介绍Linux下最常用的shell bash。bash(Bourne Again Shell)是大多数Linux发行套件的缺省shell,并被大多数用户所使用。在命令行输入命令时,每次输入一个命令,就可得到系统的响应。但

2、如果经常要依次执行同一组命令,就可以利用shell程序来实现。shell程序是放在一个文件中的一系列的Linux命令。执行shell程序时,由Linux逐条解释和执行每个命令。二、shell程序文件shell程序文件是一个特殊的文本文件,其内容包含一系列可在shell提示符下执行的命令,以及shell提供的专用的命令和控制语句。Linux提供的shell命令可通过命令help来获得,在shell提示符下,键入命令“help | more”,图5-1所示是获得所有shell命令的列表的一部分。图5-1如要获得其中命令echo的详细帮助信息,则在shell提示符下,键入命令“help echo”,

3、便获得该命令的详细使用信息如图5-2所示。图5-2图中可观察到,该命令的功能是在屏幕上输出给定的信息。shell程序文件的运行过程是将shell程序文件中的命令依次执行。三、shell程序的建立shell程序文件可用任何一个文件编辑器(如vi)来建立。例如,建立shell程序shex1,存放在当前目录下(假定当前目录为 /root),程序功能为先清屏,然后显示98年的1、2、3月份的月历。程序文件内容如下:clearcal 1 98cal 2 98cal 3 98用vi编辑器建立shell程序文件shex1的方法如下:(1)键入命令“vi shex1”,启动vi;(2)按命令“i”,进入vi的

4、插入状态;(3)输入程序文件内容;(4)按键,再键入“:”,切换到vi的命令状态;(5)最后键入命令“wq”,保存文件内容后,退出vi。至此,shell程序文件shex1已建立。四、shell程序的运行运行shell程序有两种方法:一种是在shell环境下,将shell 程序文件作为子shell程序被调用执行;另一种是将shell程序文件视作命令来执行(因此,shell程序文件可以看作是将各种命令组合在一起而形成的新命令),此时必须赋予shell程序文件执行权限。方法一:sh 方法二: 【例如】分别用两种方法运行已建立的shell程序文件shex1。方法一:在shell提示符下,键入命令:“s

5、h shex1”。方法二:(1) 首先,给shell程序文件shex1赋予可执行权限,则在shell提示符下,键入命令:“chmod a+x shex1”; (2)然后,在shell 提示符下,键入命令“/root/shex1”便可执行该shex1程序,如同其他shell命令一样。两种方法的运行结果,如图5-3所示。图5-3运行命令中有参数和没有参数的情况分别称为带参数的运行命令和不带参数的运行命令。在shell程序中可使用的形参为$0、$1、$2、$9,当程序运行时, 依次赋值给$1、$2、,通常称运行命令中所带的参数为实参。$0是一个特殊的形参,其值规定为当前运行的shell程序命令本身。

6、由于形参个数有限,当参数较多时,可通过命令shift来移动形参与实参的对应关系,执行一次shift后,$1、$2、变为依次与 对应,再执行一次shift后,$1、$2、变为依次与 对应,依此类推。通过下面的例子shell程序shex2,可观察参数的移动变化。shex2程序文件内容如下:echo $0 $1 $2shiftecho $0 $1 $2运行的命令所带参数及运行结果如图5-4所示。图5-4图中可观察到,$0的值始终是当前运行的shell程序命令本身,即 /root/shex2。例如,将shex1程序用参数形式进行改写,程序功能保持不变,最后将程序保存为shex3,存放在当前目录下。sh

7、ex3程序文件内容如下:clearcal $1 98cal $2 98cal $3 98运行的命令所带参数及运行结果分别如图5-5所示。图5-5当带参数的运行命令为“/root/shex3 1 2 3”,则运行结果显示如图4-6所示。注意,当实参为空时,形参将被传递空值。五、变量Linux 的shell程序中允许使用各种类型的变量,主要有系统、内部和用户变量三种。系统变量也称环境变量,它与用户变量的区别在于它可将值传给shell运行的其他命令或shell程序使用,亦即系统变量是全局变量。内部变量是由系统提供,与环境变量不同,用户不能修改用户变量由用户定义的变量,是当前shell的局部变量,不能

8、被shell运行的其他命令或shell程序使用,亦即用户在shell程序中定义的程序变量只在程序运行时有效,一旦退出,这些变量自动失效。通过shell提供的命令set,可以查看当前shell下定义的一系列变量及其值。例如,在shell提示符下,键入命令“set | more”,显示当前shell下定义的变量及其值如图5-6所示。图5-61、变量赋值格式: =功能:将等号右边的字符串赋给等号左边的变量,即右边的字符串为左边变量的值。说明,任何不含空格的字符串都可作变量名。若字符串中含有空格,则在字符串上加上引号。例如,要求定义一个用户变量name1,并给变量赋值为“MARY”,则在shell提示

9、符下,键入命令“name1=MARY”。例如,要求定义一个用户变量 name2并给变量赋值为“X Window”,则在shell提示符下,键入命令“name2=X Window”。2、引用变量格式:$功能:引用变量的值。例如,要求将变量name1的值赋给变量name2,则在shell提示符下,键入命令“name2=$name1”。例如,要求在屏幕上显示变量name1的值,则在shell提示符下,键入命令“echo $name1”。3、释放变量格式:unset 功能:释放一个现存的shell变量。例如,要求释放变量name1,则在shell提示符下,键入命令“unset name1”。变量的定义

10、、赋值及引用过程如图5-7所示。 图5-7六、shell程序的控制流与其他高级语言一样,shell编程中也提供了条件与循环等控制结构,下面介绍bash提供的主要的程序控制结构语句。1、条件控制流(1)if-then-else 结构 if then else fi其中,通常是“test ”,当条件成立,则返回0;条件不成立,则返回一个非0值。执行过程说明:当返回0时,则执行then后的,然后执行fi后面的命令;否则执行else 后的,然后执行fi后面的命令。在if-then-else结构中,允许在then和else后的命令集中包含if-then-else结构,即允许嵌套。需要强调的是其中if和f

11、i必须配对出现。(2)if-then-fi结构 if then fi执行过程说明:当返回0时,则执行then后的,然后执行fi后面的命令,否则执行fi后面的命令。(3)case结构case in字符串1) ;字符串n) *) esac其中,字符串中可含通配符。执行过程说明:程序将的值依次和字符串1、字符串2、字符串n进行比较,哪个匹配,则执行后面的;若都不匹配,则执行。说明,如果能同时匹配多个字符串,则只能执行第一个匹配字符串后的。2、循环控制流(1)for-in结构for in do done其中,中的值与值之间用空格分隔。执行过程说明:程序从中依次取值,赋给,并执行一轮由do和done括起

12、来的循环体中的,直到中的值取完,再执行done后面的命令。若“in ”缺省,则为实参集。(2)while 结构 while do done执行过程说明:当返回0时,则执行一轮由do和done括起来的循环体中的,直到返回一个非0值时,则不再执行循环体中的命令,执行done后面的命令。(3)until 结构until do done执行过程说明:与while 结构相反,当返回非0时,执行循环体中的命令,直到返回一个0值时,继续执行done后面的命令。3、条件判断命令test条件表达式是控制程序流程的关键,shell提供的test命令可组合多个表达式,生成功能灵活的条件表达式,使shell程序的功能

13、更强,下面介绍test命令的基本使用。格式:test 功能:test命令返回表达式成立与否的状态值,如果表达式成立,则test返回真的状态值0,否则,test返回假的状态值,即一个非0值。test命令中的常见的有以下几类:(1)文件特性类-e : 检查存在否,若存在,返回真值;否则返回假值。-f : 检查是否是普通文件,若是,返回真值;否则返回假值。-d : 检查是否是目录,若是,返回真值;否则返回假值。-r : 检查是否可读,若是,返回真值;否则返回假值。-w : 检查是否可写,若是,返回真值;否则返回假值。-x : 检查是否可执行,若是,返回真值;否则返回假值。-s : 检查是否存在且文件

14、长度大于零,若是,返回真值;否则返回假值。 nt : 如果比新(根据文件最后修改时间判断),返回真值;否则返回假值。 ot : 若比旧(根据文件最后修改时间判断),返回真值;否则返回假值。 ef : 如果和有相同的设备名和inode号,返回真值;否则返回假值。(2)字符串类-z : 如果长度为零,返回真值;否则返回假值。-n : 如果长度不为零,返回真值;否则返回假值。 = : 如果与相等,返回真值;否则返回假值。 != : 如果与不相等,返回真值;否则返回假值。(3)与或表达式类!: 如果为假,则返回真值;否则返回假值。 a : 、进行与操作,若、均为真,则返回真值;否则返回为假值。 o :

15、 、进行或操作,若、均为假,则返回假值;否则返回真值。(4)数值表达式类 eq : 如果等于,则返回真值;否则返回假值。 ne : 如果不等于,则返回真值;否则返回假值。 lt : 如果小于,则返回真值;否则返回假值。 le : 如果小于或等于,则返回真值;否则返回假值。 gt : 如果大于,则返回真值;否则返回假值。 ge : 如果大于或等于,则返回真值;否则返回假值。七、shell程序调试简介有两种简便的跟踪功能可以用于shell程序的调试,即在shell程序中加入命令set -v或set -x。格式1:set -v功能:当执行一个shell程序时,会在执行程序文件中的每条命令之前,自动在

16、屏幕上先显示该条命令。格式2:set -x功能:当执行shell程序时,它会把将要执行的命令逐条进行参量定值,并以最后执行的形式在屏幕上显示。八、实例1、编写shell程序文件shp1,存放在当前目录下,程序功能要求如下:如果 /etc目录中的文件profile存在,则将其复制到fd0盘的根目录中,并分屏显示fd0盘上的profile文件内容;否则在屏幕上显示信息“profile is not exist!”。(1)用vi创立shell程序文件shp1,程序如下:if test -e /etc/profile then cp /etc/profile /mnt/floppy cat /mnt/

17、floppy/profile|more rm -f /mnt/floppy/profile else echo profile is not exist!fi(2)用两种方法运行程序shp1方法一:在shell提示符下,键入命令“sh shp1”。方法二:给程序文件赋予可执行属性“X” 在shell提示符下,键入命令“chmod a+x shp1”运行程序 在shell提示符下,键入命令“/root/shp1”观察运行结果,若文件profile存在,则屏幕显示如图5-8所示 ,若文件profile不存在,则屏幕显示如图5-9所示。图5-8图5-92、编写shell程序文件shp2,存放在当前目

18、录下,程序功能要求如下:用for命令实现,在当前目录下创建名为user0、user1、user2、user9十个子目录后,用长格式显示这十个目录的目录信息,然后用for命令删去这十个目录后,再用长格式显示这十个目录的目录信息。(1)用vi创立shell程序文件shp2,程序如下:for i in 0 1 2 3 4 5 6 7 8 9 do mkdir user$i donels -dl user?|morefor i in 0 1 2 3 4 5 6 7 8 9 do rm -rf user$i donels -dl user? | more(2)用两种方法运行程序shp2方法一:在shel

19、l提示符下,键入命令“sh shp2”。方法二:给程序文件赋予可执行属性“X” 在shell提示符下,键入命令“chmod a+x shp2”运行程序 在shell提示符下,键入命令“/root/shp2”观察运行结果,屏幕显示如图5-10所示。图5-103、编写shell程序文件shp3,存放在当前目录下,程序功能要求如下:如果shp3运行时未带参数,则在屏幕上显示信息“Parameter Lost!”,并结束程序运行;如果shp3运行时带一个参数,则判断参数所指定的文件是否存在,如果存在则复制该文件到fd0盘的根目录;否则先在屏幕上显示信息“File not found!”,然后显示程序自

20、身。(1)用vi创立shell程序文件shp3,程序如下:if test -z $1 then echo Parameter Lost! else if test -e $1 then cp $1 /mnt/floppy else echo File not found! cat $0 fifi(2)用两种方法运行程序shp3方法一:在shell提示符下,键入命令“sh shp3”。方法二: 给程序文件赋予可执行属性“X” 在shell提示符下,键入命令“chmod a+x shp3” 运行程序 在shell提示符下,键入命令“/root/shp3”测试并观察程序运行结果,若键入命令“sh s

21、hp3”,则运行结果显示如图5-11所示;若键入命令“sh shp3 shp1”,则运行结果显示如图5-12所示;若键入命令“sh shp3 sx”(其中,sx参数所指定的文件是一个不存在的文件),则运行结果显示如图5-13所示。图 5-11图 5-12图 5-134、编写shell程序文件shp4,存放在当前目录下,程序功能要求如下:如果shp4运行时未带参数,则在屏幕上显示信息“ERROR1”;如果shp4运行时只带一个参数,则在屏幕上显示信息“ERROR2”;如果带两个不同的参数且参数1所指定的文件存在,则将参数1所指定的文件复制到fd0盘的根目录中,并改名为参数2所指定的文件名。(1)

22、用vi创立shell程序文件shp4,程序如下:if test -z $1 then echo ERROR1 else if test -z $2 then echo ERROR2 else if test $1 != $2 -a -e $1 then cp $1 /mnt/floppy/$2 fi fifi(2)用两种方法运行程序shp4方法一:在shell提示符下,键入命令“sh shp4”。方法二: 给程序文件赋予可执行属性“X” 在shell提示符下,键入命令“chmod a+x shp4” 运行程序 在shell提示符下,键入命令“/root/shp4”测试程序,若键入命令“sh s

23、hp4 shp1 test1”、“cat shp1”、“cat /mnt/floppy/test1”,则运行结果显示如图5-14所示。图5-14图中可观察到,fd0盘上的复制文件的内容test1与原文件shp1的内容完全一致。5、编写shell程序文件shp5,存放在当前目录下,程序功能要求如下: 清屏 当程序运行时,屏幕显示如下形式的信息:* This is a shell program for renaming and * 检查在fd0盘的根目录中,是否存在由参数1指定的文件,若不存在,则屏幕显示信息“File not found!”;若存在则将参数1指定的文件改名为由参数2指定的文件名

24、,然后用for命令对改名后的文件显示长格式的目录信息和文件内容。(1)用vi创立shell程序文件shp5,程序如下:clearecho *echo * This is a shell program for nameing . *echo *if test -n $1 -a -n $2 then if test $1 != $2 then if test -e $1 then mv $1 $2 for cn in ls -l cat do $cn $2 echo done fi else echo File not found! fifi(2)用两种方法运行程序shp5方法一:在shell提

25、示符下,键入命令“sh shp5”。方法二: 给程序文件赋予可执行属性“X” 在shell提示符下,键入命令“chmod a+x shp5” 运行程序 在shell提示符下,键入命令“/root/shp5”测试程序,若键入命令“/root/shp5 shp1 abc”,观察到的运行结果如图5-15所示。图5-156、编写shell程序文件shp6,存放在当前目录下,程序功能要求如下:运行程序shp6时带一个正整数参数,将参数值存入变量value中,如果该参数大于等于1但小于3,则在屏幕上显示信息“Value is less than 3 and not less than 1”;如果该参数大于

26、等于,则在屏幕上显示信息“Value is not less than 3”;最后以“value=xx”的形式显示变量value的值。(1)用vi创立shell程序文件shp5,程序如下:if test $1 -ge 1 -a $1 -lt 3 then value=$1 echo value is less than 3 and not less than 1 fiif test $1 -ge 3 then value=$1 echo value is not less than 3fiecho value=$value(2)用两种方法运行程序shp6方法一:在shell提示符下,键入命令“

27、sh shp6”。方法二: 给程序文件赋予可执行属性“X” 在shell提示符下,键入命令“chmod a+x shp6” 运行程序 在shell提示符下,键入命令“/root/shp6”测试程序并观察运行结果如图5-16所示。图5-167、编写shell程序文件shp7,存放在当前目录下,程序功能要求如下:如果shell程序文件的文件名不为test0,并且当前目录中不存在test0文件,则将本shell程序文件的名字改为test0,若当前目录中存在test0文件,则先删除,再将本shell程序文件的名字改为test0。(1)用vi创立shell程序文件shp7,程序如下:echo Filen

28、ame must be test0if test $0 != test0 then if test -e test0 then rm -f test0 fi mv $0 test0 fi(2)用两种方法运行程序shp方法一:在shell提示符下,键入命令“sh shp”。方法二: 给程序文件赋予可执行属性“X” 在shell提示符下,键入命令“chmod a+x shp” 运行程序 在shell提示符下,键入命令“/root/shp”测试程序并观察运行结果显示如图5-17所示。图5-178、编写shell程序文件shp8,存放在当前目录下,程序功能要求如下:判断fd0盘的根目录下是否存在子目录

29、dir1和dir2,若不存在,则先建立它们;若存在,则分别删除目录下的文件dlist和flist。然后将/home目录下所有目录文件的目录信息,以长格式形式保存到fd0盘的dir1子目录下的文件dlist中;将/home目录下的所有文件的目录信息,以长格式形式保存到fd0盘的dir2子目录下的文件flist中。(1)用vi创立shell程序文件shp8,程序如下:if test ! -d /mnt/floppy/dir1 then mkdir /mnt/floppy/dir1 else rm -f /mnt/floppy/dlist fiif test ! -d /mnt/floppy/dir

30、2 then mkdir /mnt/floppy/dir2 else rm -f /mnt/floppy/flistfils -dl /home /mnt/floppy/dir1/dlistls -l /home /mnt/floppy/dir2/flist(2)用两种方法运行程序shp8方法一:在shell提示符下,键入命令“sh shp8”。方法二: 给程序文件赋予可执行属性“X” 在shell提示符下,键入命令“chmod a+x shp8” 运行程序 在shell提示符下,键入命令“/root/shp8”测试程序并观察运行结果显示如图5-18所示。图5-189、编写shell程序文件s

31、hp9和sub1,存放在当前目录下,程序完成以下功能:shp9作为shell程序文件的主文件,sub1作为shell程序文件的子文件,当shp9调用sub1时传递两个参数,参数1为文件权限属性,参数2为指定用户,sub1的功能是将当前目录下以小写字母开头且文件名长度为2的所有文件,为指定用户设置指定的权限属性。(1)用vi创立shell程序文件shp9和sub1,shp9程序如下:sh sub1 r ush sub1 w gsh sub1 x ols -l a-z?键入sub1程序如下:chmod $2=$1 a-z?(2)用两种方法运行程序shp9方法一:在shell提示符下,键入命令“sh

32、 shp9”。方法二: 给程序文件赋予可执行属性“X” 在shell提示符下,键入命令“chmod a+x shp9” 运行程序 在shell提示符下,键入命令“/root/shp9”测试并观察程序运行结果显示如图5-19所示。图5-1910、编制一个shell程序文件shp10,当以命令“shp10 xx yy”执行shell程序时(其中,xx为年份参数,yy为季度参数),能自动清屏,并显示指定年份指定季度中的三个月的月历。 (1)用vi编辑器编辑建立shell程序文件shp10,程序如下:cleark=$2if test $k=1 then cal 1 $1 cal 2 $1 cal 3

33、$1fiif test $k=2 then cal 4 $1 cal 5 $1 cal 6 $1fiif test $k=3 then cal 7 $1 cal 8 $1 cal 9 $1fiif test $k=4 then cal 10 $1 cal 11 $1 cal 12 $1fi(2)用两种方法运行程序shp10方法一:在shell提示符下,键入命令“sh shp10”。方法二: 给程序文件赋予可执行属性“X” 在shell提示符下,键入命令“chmod a+x shp10” 运行程序 在shell提示符下,键入命令“/root/shp10”测试并观察程序的运行结果如图5-20所示。

34、图5-2011、编制一个shell程序shp11,当用命令“shp11 xx yy ”执行程序 shp11时(其中,xx yy 为一系列指定文件的参数),要求能判断由参数指定的每个文件是否存在,若不存在,则在屏幕上显示信息“file not exists”;如果文件存在,则进一步判断文件长度是否为零,若文件长度为零,则屏幕显示信息“file exists and has a size equal zero”,否则显示信息“file exists and has a size greater then zero”。(1)用vi编辑器建立shell程序文件shp11,用while循环结构编制shp11程序如下:while test $1 do If test -e $1 then if test -s $1 then echo file $1 exists and has a size greater than zero. else echo file $1 exists and has a size equal zero. fi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论