实验报告课程名称:LINUX系统实践实验项目:Linuxshell脚本程序设计实验仪器:PC机学院:计算机学院专业:计算机科学与技术班级姓名:计科1601班罗坤学号:2016011155日期:2018年5月14日指导教师:路旭强同组成员:成绩:1一.实验目的通过本实验练习,使学生了解常用SHELL的编程特点,掌握SHELL程序设计的基础知识。对SHELL程序流程控制、SHELL程序的运行方式、bash程序的调试方法及bash的常用内部命令有进一步的认识和理解。通过本实验,学生应能够基本掌握编写SHELL程序的步骤、方法和技巧。二.实验内容本实验包含两个具体的SHELL程序编写任务,较为全面地涉及了SHELL程序的设计方法和技术。内容如下:⑴创建以下菜单程序:USER:****HOST:********DATE:**/**/20**A:创建子目录并复制文件B:文件权限测试C:文件字符转换D:文件总数及文本行数统计E:文件查找Q:退出系统———————————————————————————————A:在用户家目录下创建名字为本人姓名的子目录,其存取权限为(drwxr-xr-x)。测试目录确实存在后,将已存在的file1、file2两文件拷入其中并分别显示两文件的内容。显示完成后将file1、file2两文件截断为大小为0的空文件。B:测试当前用户对系统中某文件是否有r、w、x的权限,输出测试结果。C:将file1、file2两文件中的小写字符转换为大写,并将转换后的内容分别写入新文件。判断上述操作成功后分别显示转换后的新文件的内容。D:统计/dev目录下目录文件和符号链接文件的数目;统计系统中某文本文件中空行的行数;显示当前系统中所有环境变量。E:在/dev目录下查找由s开头且文件名由5个字符组成的文件,找到后用file命令显示其文件类型。⑵文件pc.txt中保存了三个班级的学生选课成绩,试编写一段shell程序对文件内容进行统计、计算后输出各个班级选课的学生人数及每班选课成绩的优秀率。pc.txt文件内容如下:student1:1301:75Student2:1302:96Student3:1303:99Student4:1302:93Student5:1303:232Student6:1301:77三.实验过程SHELL程序的执行与调试:⑴在bash的SHELL程序设计中,程序必须以下面的行开始:#!/bin/bash这里符号#!用来告诉系统,后面给出的参数是用来执行该文件的程序。⑵当编辑完一个SHELL脚本后,要使该脚本能够执行,还必须使该脚本文件具有可执行权。需要执行命令:chmod+xfilename⑶在shell程序中,以#开头到一个行结束的句子表示注释信息。建议大家在编写shell程序时养成添加注释的习惯,因为注释不仅能给其他需要熟悉该程序的人以帮助,也能给出脚本编写者设计原理的提示。⑷进行shell程序设计时,必定会用到变量。Shell编程中使用的变量有自己的特色,即所有的变量都是由字符串组成的,而且对变量无须进行声明,可直接进行变量赋值操作。第一题#!/bin/bashUSER=WWcHOST=`hostname-s`TODATE=`date+%d/%m/%y`while:doclearcatMENU---------------------------------------------------------------------User:$USERHost:$HOSTDate:$TODATE---------------------------------------------------------------------A:创建子目录并复制文件B:文件权限测试C:文件字符转换D:文件总数及文本行数统计E:文件查找Q:退出系统--------------------------------------------------------------------MENUecho-npleasechoose[A,B,C,D,E,Q]3readCHOICEcase$CHOICEinA)echoA:创建子目录并复制文件echo输入要创建的文件名:readFILEmkdir$FILEchmod755$FILEif[$?-eq0]thencpfile1$FILEcpfile2$FILEechofile1内容catfile1:$FILE/file1echofile2内容catfile2echo#:file2fi;;B)echoB:文件权限测试echo请输入要测试的文件绝对路径readWENJIANtest-r$WENJIANif[$?-eq0]thenecho可读elseecho不可读fitest-w$WENJIANif[$?-eq0]thenecho可写elseecho不可写fi4test-x$WENJIANif[$?-eq0]thenecho可执行elseecho不可执行fi;;C)echoC:文件字符转换catfile1|tr[a-z][A-Z]file1.secdiff-qfile1file1.secif[$?-eq1]thenechofile1.sec内容catfile1.secficatfile2|tr[a-z][A-Z]file2.secdiff-qfile2file2.secif[$?-eq1]thenechofile2.sec内容catfile2.secfi;;D)echo/dev目录下目录文件和符号链接文件的数目find/dev-typed|wc-lfind/dev-typel|wc-lechofile1空行行数统计grep^$file1|wc-lecho显示当前系统中所有环境变量env;;E)echo文件查找5find/dev-name's????'|xargsfile;;Q)exit0;;esacreadDDdone实现过程:执行A:6执行B:7执行C:8执行D:执行E:9第二题:代码:#!/bin/bash#统计各个班级选课的学生人数和各班选课成绩的优秀率sum1401=0sum1402=0sum1403=0well1401=0well1402=0well1403=0rate1401=0rate1402=0rate1403=0SAVEDIFS=$IFSIFS=:whilereadSTUDENTCLASSGRADEdocase$CLASSin1401)sum1401=`expr$sum1401+1`if[$GRADE-ge80]10thenwell1401=`expr$well1401+1`fi;;1402)sum1402=`expr$sum1402+1`if[$GRADE-ge80]thenwell1402=`expr$well1402+1`fi;;1403)sum1403=`expr$sum1403+1`if[$GRADE-ge80]thenwell1403=`expr$well1403+1`fi;;esacdonepc.txtIFS=$SAVEDIFSrate1401=`expr$well1401\*100/$sum1401`rate1402=`expr$well1402\*100/$sum1402`rate1403=`expr$well1403\*100/$sum1403`echo各个班级选课的学生人数echo1401:$sum1401echo1402:$sum1402echo1403:$sum1403echo各班选课成绩的优秀率echo1401:$rate1401%echo1402:$rate1402%echo1403:$rate1403%运行lk2:11四.实验总结通过这次实验,使得我对Linux脚本编写以及调试有了进一步的理解,在SHELL程序中不仅仅可以使用命令的集合,而且可以安排自动化处理过程,因此可以通过编写SHELL程序使大量的任务执行实现自动化。我们可以使用任意一种文本编辑器完成SHELL程序的编写,在SHELL编程中要遵循一定的程序设计规则和变量使用规则。通过本实验练习,对SHELL程序流程控制、SHELL程序的运行方式、bash程序的调试方法及bash的常用内部命令有进一步的认识和理解,使得对以后的学习有了进一步的帮助。