011463孟启贤实验三shell脚本程序设计.docx
《011463孟启贤实验三shell脚本程序设计.docx》由会员分享,可在线阅读,更多相关《011463孟启贤实验三shell脚本程序设计.docx(13页珍藏版)》请在冰点文库上搜索。
011463孟启贤实验三shell脚本程序设计
实验报告
课程名称Linux系统实践
实验项目LINUXSHELL脚本程序设计
实验仪器PC
系别计算机学院
专业网络工程
班级/学号网1702/**********
学生姓名孟启贤
实验日期4.15
成绩
指导教师李艳平
实验三LINUXSHELL脚本程序设计
一、实验目的:
通过本实验练习,使学生了解常用SHELL的编程特点,掌握SHELL程序设计的基础知识。
对SHELL程序流程控制、SHELL程序的运行方式、bash程序的调试方法及bash的常用内部命令有进一步的认识和理解。
通过本实验,学生应能够基本掌握编写SHELL程序的步骤、方法和技巧。
二、实验环境
操作系统:
任何Unix/Linux或windows系列
应用系统:
SHELL或windows环境下的cygwin模拟系统
三、实验要求
1、做好实验预习,通过查找资料、阅读系统提供的帮助文件等多种渠道了解本实验所使用的SHELL命令及各种技术方法。
充分利用所学知识,预设多种实现思路。
2、写出实验报告,内容是:
⑴简要说明实验的目的、任务与设备。
⑵写出实验步骤、实现的技术手段及关键代码。
⑶在给定实验数据的基础上给出相应的输出结果。
⑷总结实验中遇到的问题及解决方法。
⑸写出实验心得与收获。
四、实验内容
本实验包含两个具体的SHELL程序编写任务,较为全面地涉及了SHELL程序的设计方法和技术。
内容如下:
⑴创建以下菜单程序:
USER:
****HOST:
********DATE:
**/**/20**
A:
创建子目录并测试
B:
文件查找
C:
文件权限测试及统计
D:
文件创建与复制
E:
文件内容修改
Q:
退出系统
———————————————————————————————
A:
在用户家目录下创建名字为你学号后四位数字的子目录,其存取权限为(drwxr-xr-x)。
测试确认目录存在,输出提示。
B:
在/dev目录下查找由sd开头且文件名由3个字符组成的文件,找到后用file命令显示其文件类型;显示当前系统中所有变量和Shell函数。
C:
测试当前用户对系统中某文件是否有r、w、x的权限,输出测试结果。
统计/dev目录下块设备文件和字符设备文件的数目;统计date命令的
帮助手册中空行的个数。
D:
用长格式(ls-l)显示目录/dev中所有符号链接文件,
将输出结果排序后写入文件file1,
将输出结果的后3行排序后写入file2文件;使用comm命令将两个文件的共有行写入文件file3。
将file1、file2两文件拷入上面新创建的子目录中,最后将文件file2截断为大小为0的空文件。
File1有内容。
File2为空,本来有三行。
如下:
E:
将file1文件中的字符“-”删除,再将字符“>”用“@”替换,修改后写入新文件newf1。
判断上述操作成功后显示新文件newf1的内容。
源代码如下:
#!
/bin/bash
#menu
USER=`whoami`
THIS_HOST=`hostname-s`
MYDATE=`date+%d/%m/%y`
while:
do
clear
cat<-------------------------------------------------------------------------------------------------------
USER:
$USERHost:
$THIS_HOSTDate:
$MYDATE
-------------------------------------------------------------------------------------------------------
A:
创建子目录并测试
B:
文件查找
C:
文件权限测试及统计
D:
文件创建与复制
E:
文件内容修改
Q:
退出系统
----------------------------------------------------------------------------------------------------
MAYDAY
echo-n"你的选择[A,B,C,D,E,Q]:
"
readCHOICE
case$CHOICEin
A|a)
mkdir1463
chmodu+wxr1463
chmodg+xr1463
chmodo+x1463
ls
;;
B|b)
find/dev-namesd*>dev1463
v=$(catdev1463)
echo$v
file-b$v
echo'SHELL变量和函数'
set
;;
C|c)
echo"请输入文件的绝对路径"
readfpath
[-r$fpath]
if[$?
-eq0]
then
echo"可读"
else
echo"不可读"
fi
[-w$fpath]
if[$?
-eq0]
then
echo"可写"
else
echo"不可写"
fi
[-x$fpath]
if[$?
-eq0]
then
echo"可执行"
else
echo"不可执行"
fi
;;
D|d)
ls-l/dev|sort>file1
ls-l/dev|tail-n3|sort>file2
commfile1file2>file3
cpfile11463|cpfile21463|:
>file2
echo"COMMENDSUCCEED!
"
;;
E|e)
catfile1|tr-d"-"|tr">""@">newf1
if[$?
-eq0];then
catnewf1
fi
;;
Q|q)
exit0
;;
*)echo"输入无效"
esac
echo-n"请输入任意建继续:
"
readDUMMY
done
⑵文件pc.txt中保存了部分学生某门课程的成绩,试编写一段shell程序对以下成绩计算后重新输出到文件cj.txt。
要求:
新文件内容要求用制表符(Tab键)做域分隔符;
总评成绩由“卷面*80%+平时*20%”得出,保留两位小数;
将你本人的信息插入到第三条(姓名用学号的后四位,后面的成绩均为100);
统计卷面成绩的及格率。
pc.txt文件内容如下(各域之间用“,”分割):
姓名学号卷面平时
stu1,2017000001,31,75
stu2,2017000002,55,68
stu3,2017000003,90,99
stu4,2017000004,76,83
stu5,2017000005,52,60
stu6,2017000006,71,77
cj.txt文件内容如下:
姓名学号卷面平时总评
stu12017000001317539.80
stu22017000002556857.60
xxxx201701xxxx100100100.00
stu32017000003909991.80
stu42017000004768377.40
stu52017000005526053.60
stu62017000006717772.20
卷面成绩的及格率:
57.14%
源代码如下:
#!
/bin/bash
IFS=','
n=0
m=0
>cj.txt
echo-e"姓名\t学号\t\t卷面\t平时\t总评">>cj.txt
whilereadnamenumgradepgrade
do
letn++
if[$n-eq1]
then
continue
fi
if[$n-eq4]
then
echo-e"1463\t2017011463\t100\t100\t100">>cj.txt
fi
if[$grade-ge60]
then
letm++
fi
echo-e"$name\t$num\t$grade\t$pgrade\t`echo"scale=2;$grade*80/100+$pgrade*20/100"|bc`">>cj.txt
doneecho-e-n"卷面成绩的及格率:
">>cj.txt
letm++
echo"$m$n"|awk'{printf("%.2f%%\n",$1/$2*100)}'>>cj.txt
五、实验总结
1、总结实验中遇到的问题及解决方法。
2、写出实验心得与收获。
.通过这次实验认识和理解SHELL程序的运行方式、bash程序的调试方法,大概掌握了编写SHELL程序的步骤、方法和技巧,特别是if等循环判断语句的使用方法,也更加熟练的使用一些操作命令语句。