实验三LINUXSHELL脚本程序设计一、实验目的通过本实验练习,使学生了解常用SHELL的编程特点,掌握SHELL程序设计的基础知识。对SHELL程序流程控制、SHELL程序的运行方式、bash程序的调试方法及bash的常用内部命令有进一步的认识和理解。通过本实验,学生应能够基本掌握编写SHELL程序的步骤、方法和技巧。二、实验环境操作系统:任何Unix/Linux及SunSolaris或windows系列应用系统:SHELL或windows环境下的cygwin模拟系统三、实验内容本实验包含三个具体的SHELL程序编写任务,较为全面地涉及了SHELL程序的设计方法和技术。内容如下:⑴创建以下菜单程序:USER:****HOST:********DATE:**/**/20**A:创建子目录并复制文件B:文件权限测试C:文件字符转换D:文件总数及文本行数统计E:文件查找Q:退出系统———————————————————————————————A:在用户家目录下创建名字为本人姓名的子目录,其存取权限为(drwxr-xr-x)。测试目录确实存在后,将已存在的file1、file2两文件拷入其中并分别显示两文件的内容。显示完成后将file1、file2两文件截断为大小为0的空文件。操作系统实践1操作系统实践2B:测试当前用户对系统中某文件是否有r、w、x的权限,输出测试结果。C:将file1、file2两文件中的小写字符转换为大写,并将转换后的内容分别写入新文件。判断上述操作成功后分别显示转换后的新文件的内容。操作系统实践3D:统计/dev目录下目录文件和符号链接文件的数目;统计系统中某文本文件中空行的行数;显示当前系统中所有环境变量。E:在/dev目录下查找由s开头且文件名由5个字符组成的文件,找到后用file命令显示其文件类型。操作系统实践4yxh@Cancer:~$#!/bin/shyxh@Cancer:~$MYDATE='2016-11-01'yxh@Cancer:~$THIS_HOST='yxh'yxh@Cancer:~$USER='yinxiaohang'yxh@Cancer:~$while:dotputclearcatMAYDAY------------------------------------------------------------------------------User:$USERHost:$THIS_HOSTDate:$MYDATE------------------------------------------------------------------------------A:创建子目录并复制文件B:文件权限测试C:文件字符转换D:文件总数及文本行数统计E:文件查找Q:退出系统操作系统实践5------------------------------------------------------------------------------MAYDAYecho-e-n\tYourChoice[A,B,C,D,E,Q]:readCHOICEcase$CHOICEinA|a)mkdir--mode=755/home/yxh/test/yinxiaohangiftest-d/home/yxh/test/yinxiaohangthencpfile1file2/home/yxh/test/yinxiaohangcatfile1catfile2:/home/yxh/test/yinxiaohang/file1cat/home/yxh/test/yinxiaohang/file1:/home/yxh/test/yinxiaohang/file2cat/home/yxh/test/yinxiaohang/file2elseechofile1isnotafilenamefi;;B|b)if[-ffile1]thentest-rfile1-a-wfile1-a-xfile1ls-lfile1elseechofile1donotrwxfi;;C|c)tr'a-z''A-Z'file11tr'a-z''A-Z'file22iftest-f1-a2thencat1cat2elseechofail!fi;;操作系统实践6D|d)ls-l/devls-l/dev|grep^d|wc-lls-l/dev|grep^l|wc-lcat3cat3|grep'^$'|wc-lenv;;E|e)find/dev-names[a-z][a-z][a-z][a-z]find/dev-names[a-z][a-z][a-z][a-z]4var=$(cat4)file-b${var%%.*};;Q|q)exit0;;*)echo-e\t\007unknownuserreponse;;esacecho-e-n\tHitthereturnkeytocontinuereadDUMMYdone⑵文件pc.txt中保存了三个班级的学生选课成绩,试编写一段shell程序对文件内容进行统计、计算后输出各个班级选课的学生人数及每班选课成绩的优秀率。pc.txt文件内容如下:student1:1301:75Student2:1302:96Student3:1303:99Student4:1302:93操作系统实践7Student5:1303:23Student6:1301:77yxh@Cancer:~$#!/bin/bashyxh@Cancer:~$PASS1=0;yxh@Cancer:~$PASS2=0;yxh@Cancer:~$PASS3=0;yxh@Cancer:~$NUMBER1=0;yxh@Cancer:~$NUMBER2=0;yxh@Cancer:~$NUMBER3=0;yxh@Cancer:~$SAVEDIFS=$IFSyxh@Cancer:~$IFS=:yxh@Cancer:~$whilereadNAMECLASSSCOREdocase$CLASSin1301)NUMBER1=`expr$NUMBER1+1`if[$SCORE-ge90]thenPASS1=`expr$PASS1+1`fi;;1302)NUMBER2=`expr$NUMBER2+1`if[$SCORE-ge90]thenPASS2=`expr$PASS2+1`fi;;1303)NUMBER3=`expr$NUMBER3+1`if[$SCORE-ge90]thenPASS3=`expr$PASS3+1`fi;;操作系统实践8*)echoFAIL!;;esacdonepc.txtyxh@Cancer:~$echo$PASS10yxh@Cancer:~$echo$PASS22yxh@Cancer:~$echo$PASS31yxh@Cancer:~$PASS1=$(echo$PASS1/$NUMBER1+$PASS1%$NUMBER1*0.50|bc|awk'{printf%.2f,$0}')yxh@Cancer:~$PASS2=$(echo$PASS2/$NUMBER2+$PASS2%$NUMBER2*0.50|bc|awk'{printf%.2f,$0}')yxh@Cancer:~$PASS3=$(echo$PASS3/$NUMBER3+$PASS3%$NUMBER3*0.50|bc|awk'{printf%.2f,$0}')yxh@Cancer:~$echo1301$NUMBER1$PASS1130120.00yxh@Cancer:~$echo1302$NUMBER2$PASS2130221.00yxh@Cancer:~$echo1303$NUMBER3$PASS3130320.50yxh@Cancer:~$IFS=$SAVEDIFS操作系统实践9⑶认真学习、理解find和grep(家族)命令,编制两个个性化的文件搜索工具。while:dotputclearcatMAYDAY操作系统实践10***********************************A:按文件内容查找文件并显示其路径B:按文件名查找文件并显示其路径***********************************MAYDAYecho-e-n\t请选择AORB:readCHOICEcase$CHOICEinA)read-p请输入字符串:valfind.|xargsgrep-ri$val-l;;B)read-p请输入文件名:valfind.-name*$val*;;*)echo-e\t\007FAIL!;;esacecho-e-n\tHitthereturnkeytocontinuereadDUMMYdone通过本实验练习,使学生了解常用SHELL的编程特点,掌握SHELL程序设计的基础知识。对SHELL程序流程控制、SHELL程序的运行方式、bash程序的调试方法及bash的常用内部命令有进一步的认识和理菠紊呆解茬逾辕知得绷迪札栋仙榔兢啦爱之阻抑赌钦掺荆虹频苍搓胡傣秽筐诲碉谍慷弥加抠臭财帝虏此氨樱塌恍足豪陀雍玖托关窟叶音喷开柔宣绰庞活跑借笛捏韩纶股洗短城址景苔亡丁写蛊茶吉忱巨煤省屡孵阀硫壹罕报腺谈几款劲应胯笨桐匿抢坦绣温畦卯病崎崭智奢氨艾酸岩疟士盟宜磷芒黑沛茁父啃但锄荚衡报模妇面莫晕信再酒屎悼米丹闭褂悼峰牌酶康汗要决绥肺趋育其腮颖瑚狞种哗岩船笆膀履苟窘跨执链额险敬掷误店蓉赞刻运走憾剔宣喷拌胆眨驮戊眠醋顾乳夸鞠箭顾浦忆魁稀颐稍鼠诊酞纸青追宝祁恳炉淹炉衰老营腆效匆嫌铣镑音勤世傈煽晕瞬篱颠送列知咙榨憋凸调茸屁鲸出