shell题.docx
《shell题.docx》由会员分享,可在线阅读,更多相关《shell题.docx(15页珍藏版)》请在冰豆网上搜索。
![shell题.docx](https://file1.bdocx.com/fileroot1/2023-6/1/a7176f63-8eb7-4962-9825-0027b383a8ed/a7176f63-8eb7-4962-9825-0027b383a8ed1.gif)
shell题
实验一shell程序设计
学号
411109030105
姓名
郭璇
实验日期
2014-2-28
实验目的
1.熟悉Linux环境下的Shell命令行操作。
2.了解Shell的一般语法规则,掌握并能编写简单的Shell程序。
3.掌握基本的Shell程序调试技术。
实验内容
Part1:
shell命令行
1.ls命令多次执行的输出结果都重定向到文件ls.log保存。
(1)ls命令多次执行的输出结果都重定向到文件ls.log保存。
首先,用ls>指令重定向到ls.log,再用cat指令打开ls.log文件。
(2)题目解答的命令
root@ubuntu:
~#ls>ls.log
root@ubuntu:
~#catls.log
(3)运行结果的截图及说明
图1-1
说明:
用ls指令重定向到ls.log,再用cat指令打开ls.log文件,列出ls重定向到ls.log中的内容。
2.列出/etc目录下以字母p开头的以.conf结尾的配置文件名称。
(1)列出某一目录下的满足条件的配置文件名称。
首先,应该用find命令,然后要求在/etc/以字母p开头的以.conf结尾的文件名称,则需输入-name,p,.conf,其中p后面应加上一个‘*’,略指文件名称中省略的部分
(2)题目解答的命令
root@ubuntu:
~#find/etc/-namep*.conf
(3)运行结果的截图及说明
图1-2
说明:
在root@ubuntu:
~#之后,直接加find命令,输入要求,回车,就会出现满足命令的文件名称依次列出。
3.如何使用shell命令统计某个目录下的文件数(目录中有下级目录)?
(1)统计某个目录下的文件数(目录中有下级目录)。
以etc文件夹为例,ls–l长列表输出该目录下文件信息,grep“^-”将长列表过滤,只保留一般文件,如果只保留目录则为^d,wc-l统计输出信息的行数,一行信息对应一个文件,统计结果即为文件个数。
(2)题目解答的命令或源代码
root@ubuntu:
~#ls/etc-lr|grep"^-"|wc–l
root@ubuntu:
~#ls/etc-lr|grep"^d"|wc-l
(3)运行结果的截图及说明
图1-3
(1)
图1-3
(2)
说明:
图1-3
(1)为etc中过滤长列表的一部分后剩余的文件数目,而图1-3
(2)则为etc中总的文件个数。
4.利用shell命令统计当前目录(如/home)下的文件数。
(1)上题与本题类似,本体是统计当前目录。
(2)题目解答的命令或源代码
root@ubuntu:
~#ls/home-lr|grep"^d"|wc-l
(3)运行结果的截图及说明
图1-4
说明:
本题与上一题类似,只是将任一文件夹的名称改为当前目录。
5.利用shell命令统计你所完成的《学生成绩管理系统》代码行数。
(1)题目分析及设计方案
将学生成绩管理系统(SIMS.txt)移动到主文件夹下,用cat指令统计行数。
(2)题目解答的命令或源代码
root@ubuntu:
~#catSIMS|wc-l
(3)运行结果的截图及说明
图1-5
说明:
学生成绩管理系统不能用文件夹表示,需转换成txt格式。
6.shell中历史命令的查看:
(1)使用上下箭头翻看历史命令
①题目分析及设计方案
直接用鼠标拖动页面查看。
②运行结果的截图及说明
图1-6
(1)
说明:
用鼠标控制箭头直接上下滑动。
(2)使用history命令查看命令的历史记录列表
①题目分析及设计方案
直接输入history命令。
②题目解答的命令或源代码
root@ubuntu:
~#history
③运行结果的截图及说明
图1-6
(2)
图1-6(3)
说明:
图1-6
(2)为history指令输入,图1-6(3)为history指令结束。
(3)使用管道符连接history命令和more命令,实现执行结果的分页查看
①题目分析及设计方案
直接用管道符连接history和more。
②题目解答的命令或源代码
root@ubuntu:
~#history|more
③运行结果的截图及说明
图1-6(4)
图1-6(5)
说明:
图1-6(4)为指令输入,图1-6(5)为指令结束。
(4)使用管道符连接history命令和head命令,显示前5条记录。
①题目分析及设计方案
直接用管道符连接history和head,又因为显示前5条记录,则加-5。
②题目解答的命令或源代码
root@ubuntu:
~#history|head-5
③运行结果的截图及说明
图1-6(6)
说明:
输入指令后,直接显示前五条指令。
Part2:
shell脚本
1.写一个脚本,执行后,打印一行提示“Pleaseinputanumber:
",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。
直到用户输入"end"停止。
(1)题目分析及设计方案
首先,启动gedit建立一个脚本(number),然后在脚本中写入符合要求的程序(图2-1
(1)),最后在执行脚本。
(2)题目解答的命令或源代码
脚本number:
#!
/bin/bash
unsetvar
while["$var"!
="end"]
do
echo-n"pleaseinputanumber:
"
readvar
if["$var"="end"]
then
break
fi
echo"varis$var"
done
命令:
root@ubuntu:
~#geditnumber.sh
用gedit建立脚本number
root@ubuntu:
~#chmod+xnumber.sh
root@ubuntu:
~#./number.sh
先为脚本增加可执行属性,再执行脚本
(3)运行结果的截图及说明
图2-1
(1)
图2-1
(2)
说明:
首先启动gedit建立新的脚本number,然后在脚本中输入满足条件的代码,如图2-1
(1)所示,再用chomd指令为脚本增加可执行属性,最后在执行脚本。
2.编写shell脚本lish.sh,实现功能:
显示当前系统时间。
列出/etc目录下以字母p开头的以.conf结尾的配置文件名称并输出到list.txt中。
(1)题目分析及设计方案
首先,应该先建立一个脚本list.sh,在脚本中先实现显示当前系统时间和列出/etc目录下以字母p开头的一.conf结尾的配置文件名称,再将这些文件名称输出到list.txt中。
(2)题目解答的命令或源代码
List.sh中的源代码:
te|teelist.txt
find/etc/-nameP*.conf|tee-alist.txt
root@ubuntu:
~#geditlist.sh
建立脚本list.sh
root@ubuntu:
~#chmod+xlist.sh
root@ubuntu:
~#./list.sh
增加脚本可执行属性,执行脚本
(3)运行结果的截图及说明
图2-2
(1)
图2-2
(2)
说明:
首先建立脚本list.sh,在脚本中写入满足条件的程序(图2-2
(1)),在增加脚本的可执行属性(chmod+xlist.sh),最后运行脚本,显示满足条的内容(时间和目录)。
3.编写shell脚本cf.sh,实现功能:
统计某个目录下的文件数(目录中有下级目录)。
(1)题目分析及设计方案
首先,建立脚本cf.sh,在脚本中写入统计某个目录下的文件数的指令,然后执行脚本。
(2)题目解答的命令或源代码
脚本cf.sh:
#!
/bin/bash
ls-l|grep"^-"|wc–l
root@ubuntu:
~#geditcf.sh
建立脚本cf.sh
root@ubuntu:
~#chmod+xcf.sh
root@ubuntu:
~#./cf.sh
增加脚本的可执行属性,执行脚本
(3)运行结果的截图及说明
图2-3
(1)
图2-3
(2)
说明:
建立脚本cf.sh,在脚本红输入满足条件的指令,如图2-3
(1),增加脚本的可执行属性(chmod+xcf.sh),执行脚本,输出目录下的文件个数。
4.写一个脚本:
①创建目录/user/script
②切换工作目录至此目录中
③查找/etc/pam.d
④复制/etc/pam.d目录至当前目录,并重命名为tt
⑤将当前目录的tt及里面的文件和子目录的权限改为可读、可写、可执行。
(1)题目分析及设计方案
首先建立脚本(jj.sh),输入符合要求的代码(创建路径,切换目录,查找,复制目录并重命名,更改权限),再运行脚本。
(2)题目解答的命令或源代码
jj.sj源代码:
#!
/bin/bash
mkdiruser
cduser
mkdirscript
find/etc/pam.d
cp-r/etc/pam.d./tt
find./tt-typef-execchmod777{}\;
find./tt-typef-execchmod777{}\;
root@ubuntu:
~#geditjj.sh
创建脚本jj.sh
root@ubuntu:
~#chmod+xjj.sh
root@ubuntu:
~#./jj.sh
增加执行权限,运行程序。
(3)运行结果的截图及说明
图2-4
(1)
图2-4
(2)
图2-4(3)
说明:
建立脚本jj.sh,输入满足该题目条件的代码图2-4
(1),运行后,显示的目录图2-4(3)属于重命名后tt内的目录图2-4
(2),图2-4
(1)中‘777’是权限全部包含的意思。
5.编写一个shell脚本,完成如下任务:
要求采用交互式的方式,使用菜单界面,能够从键盘中获得一组数值,要求功能完善,操作方便。
①输入命令add,则可以添加一个新数值;
②输入命令avg,则可以计算所有值的平均数;
③输入命令max,则可以找到数值中的最大值;
④输入命令min,则可以找到数值中的最小值;
⑤输入命令show,则可以查看当前所有输入的数值;
⑥输入命令exit,则退出。
(1)题目分析及设计方案
首先,建立脚本cc.sh,然后再脚本中输入相应代码,主要是几个指令的源代码运行及设置,主题运用的结构是ifelsif格式。
(2)题目解答的命令或源代码
root@ubuntu:
~#geditcc.sh
root@ubuntu:
~#chmod+xcc.sh
root@ubuntu:
~#./cc.sh
(3)运行结果的截图及说明
图2-5
(1)
图2-5
(2)
图2-5(3)
说明:
首先建立脚本cc.sh图2-5
(1),由脚本中的程序运行图2-5
(2),执行程序,得到结果图2-5(3)。
在实验过程中遇到的问题及自己的解决方案和心得。
在本次试验中,主要出现的问题有:
第一大部分中,由于是第一次接触Linux,很多具体指令还没有掌握,所以第一部分查了很多资料,具体是指令的细节应用;第二大部分,难度上增加了许多,像有的指令根本不知道如何应用,或者是根本不知道,只能查找相关的例题,在自己分析,例如,计算行数的时候,刚开始我本来打算用find,结果不行,最后还是用cat解决的,还有查了资料我才知道“777”代表了全部权限都能实行。
总之,这次实验有了很大的收获,尤其是各种指令的应用方面。
参考资料:
UNIX/Linux程序设计实践教程