实验三-LINUX-SHELL编程

  • 格式:doc
  • 大小:36.00 KB
  • 文档页数:7

实验三-LINUX-SHELL编程
实验三LINUX SHELL 编程
四、实验内容
本实验包含两个具体的SHELL程序编写任务,较为全面地涉及了SHELL 程序的设计方法和技术。

内容如下:
1、创建以下菜单程序:
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 命令显示其文件类型。

#!/bin/bash
USER=WWc
HOST=`hostname -s`
MYDATE=`date +%d/%m/%y`
do
clear
cat << MAYDAY
------------------------------------------------------------------
User:$USER Host:$HOST Date:$MYDATE
------------------------------------------------------------------
A:创建子目录并复制文件
B:文件权限测试
C:文件字符转换
D:文件总数及文本行数统计
E:文件查找
Q:退出系统
-----------------------------------------------------------------
MAYDAY
echo -n "Please Choose [A,B,C,D,E,Q]"
read CHOICE
case $CHOICE in
A)
echo "A:创建子目录并复制文件"
echo "输入要创建的文件名:"
read FILE
mkdir $FILE
chmod 755 $FILE
test -d $FILE
if [ $? -eq 0 ]
then
cp file1 $FILE
cp file2 $FILE
echo "file1内容"
:>$FILE/file1
echo "file2内容"
cat file2
echo "#:>file2"
fi
;;
B)
echo "B:文件权限测试"
echo "请输入要测试的文件绝对路径" read NAME1
test -r $NAME1
if [ $? -eq 0 ]
then
echo "可读"
else
echo "不可读"
fi
test -w $NAME1
if [ $? -eq 0 ]
then
echo "可写"
else
echo "不可写"
fi
test -x $NAME1
if [ $? -eq 0 ]
then
echo "可执行"
else
echo "不可执行"
fi
;;
echo "C:文件字符转换"
cat file1 | tr "[a-z]" "[A-Z]" >file1.out
diff -q file1 file1.out
if [ $? -eq 1 ]
then
echo "file1.out内容"
cat file1.out
fi
cat file2 | tr "[a-z]" "[A-Z]" >file2.out
diff -q file2 file2.out
if [ $? -eq 1 ]
then
echo "file2.out内容"
cat file2.out
fi
;;
D)
echo "/dev 目录下目录文件和符号链接文件的数目" find /dev -type d | wc -l
find /dev -type l | wc -l
echo "file1空行行数统计"
grep ^$ file1 | wc -l
echo "显示当前系统中所有环境变量"
env
;;
E)
echo "文件查找"
find /dev -name 's????' | xargs file
;;
Q)
exit 0
;;
echo "请输入ABCDEQ"
esac
read DD
done
2、文件 pc.txt 中保存了三个班级的学生选课成绩,试编写一段 shell 程序对文件内容进行统计、计算后输出各个班级选课的学生人数及每班选课成绩的优秀率。

pc.txt 文件内容如下:
Student1:1401:75
Student2:1402:96
Student3:1403:99
Student4:1402:93
Student5:1403:23
Student6:1401:77
#!/bin/bash
SAVEDIFS=$IFS
IFS=:
COUNT1401=0
COUNT1402=0
COUNT1403=0
COUNT1=0
COUNT2=0
COUNT3=0
RATE1=0
RATE2=0
RATE3=0
while read STUDENT CLASS GRADE
do
case $CLASS in
1401)
COUNT1401=`expr $COUNT1401 + 1`
;;
1402)
COUNT1402=`expr $COUNT1402 + 1`
;;
1403)
COUNT1403=`expr $COUNT1403 + 1`
;;
esac
if [ $CLASS -eq 1401 ]&&[ $GRADE -ge 80 ] then
COUNT1=`expr $COUNT1 + 1`
fi
if [ $CLASS -eq 1402 ]&&[ $GRADE -ge 80 ] then
COUNT2=`expr $COUNT2 + 1`
fi
if [ $CLASS -eq 1403 ]&&[ $GRADE -ge 80 ] then
COUNT3=`expr $COUNT3 + 1`
fi
RATE1=`expr $COUNT1 \* 100 / $COUNT1401` RATE2=`expr $COUNT2 \* 100 / $COUNT1402` RATE3=`expr $COUNT3 \* 100 / $COUNT1403` done < pc.txt
IFS=SAVDEIFS
echo "各个班级选课的学生人数"
echo "1401 = $COUNT1401"
echo "1402 = $COUNT1402"
echo "1403 = $COUNT1403"
echo "各个班级选课的学生人数"
echo "1401 = $RATE1%"
echo "1402 = $RATE2%"
echo "1403 = $RATE3%"
3。