习题07Shell编程.docx
- 文档编号:3711489
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:15
- 大小:27.62KB
习题07Shell编程.docx
《习题07Shell编程.docx》由会员分享,可在线阅读,更多相关《习题07Shell编程.docx(15页珍藏版)》请在冰豆网上搜索。
习题07Shell编程
习题07_Shell编程
一、单选
1.下面哪个命令是用来定义shell的全局变量( D )。
A.exportfs B.alias
C.exports D.export
2.在Shell脚本中,用来读取文件各个域的容并将其赋值Shell变量的命令是(D)。
A.foldB.join
C.trD.read
3.当字符串用双引号(’’)括起来时,SHELL将(C)。
A.解释引号的特殊字符B.执行引号中的命令
C.不解释引号的特殊字符D.结束进程
4.以下哪个环境变量表示当前路径(B)。
A.PATHB.PWD
C.HOMED.ROOT
5.shell不仅是(用户命令的解释器),它同时也是一种功能强大的编程语言,(bash)是Linux的缺省shell。
6.编写的Shell程序运行前必须赋予该脚本文件(执行)权限。
7.对于Shell脚本程序,若输入参数数量多于9个,则程序遍历每个参数可通过使用(shift)命令实现。
8.为脚本程序指定执行权的命令及参数是( chmoda+xfilename )。
9.在shell编程时,使用方括号表示测试条件的规则是:
方括号两边必有(空格)。
10.输入了Shell命令的部分字符后按(tab)键可补全其余部分。
11.改变命令提示符的环境变量是(PS1)。
11.grep-E'[Hh]enr(y|ietta)'file的功能是:
(在文件File中查找Henry、henry、Henrietta或henrietta)。
12.如下为命令终端下的一个截图:
则,以下两句的执行结果是:
(thehomepathis$HOME)。
path=‘thehomepathis$HOME’
echo$path
13.以下为程序名为prog的程序容。
则shprogabcd的执行结果为(C)。
setABCD
shift
shift
echo$1
三、简答
1.下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。
#!
/bin/sh
DIRNAME=`ls/root|grepbak`#
(1)
if[-z"$DIRNAME"];then#
(2)
mkdir/root/bak;cd/root/bak#(3)
fi
YY=`date+%y`;MM=`date+%m`;DD=`date+%d`#(4)
BACKETC=$YY$MM$DD_etc.tar.gz#(5)
tarzcvf$BACKETC/etc#(6)
echo"filebackfinished!
"
答:
#
(1)获取/root中名称包含bak的文件或目录
#
(2)判断1结果为空
#(3)创建目录/root/bak并进入该目录
#(4)获取当前时间的年月日
#(5)按照年(2位)月(2位)日(2位)_etc方式构造压缩文件名
#(6)压缩etc目录并保存在/root/bak中6分
程序功能:
若/root/bak不存在则创建之,然后将/etc按日期打包保存于该目录中。
2分
2.什么是位置变量?
shell的变量类型有哪些种?
答:
位置变量是指命令行上传递给程序的参数。
Shell变量可以分为:
用户自定义变量、环境变量、位置变量、特殊变量
3.下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。
#!
/bin/bash#
(1)
dir=$1#
(2)
if[-d$dir]#(3)
then
cd$dir#(4)
forfilein*
do
if[-f$file]#(5)
then
cat$file#(6)
echo“endoffile$file”
fi
done
else
echo“baddirectoryname$dir”
fi
答:
#
(1)使用/bin/bash解释脚本
#
(2)将位置变量1赋值给变量dir
#(3)如果dir所指为目录
#(4)将当前目录改为dir
#(5)如果循环变量file所指是普通文件
#(6)显示文件file的容6分
程序功能:
若命令行参数是一个合法目录则显示该目录下所有普通文件的容,否则显示错误的目录名信息。
4.试编写一个SHELL程序,该程序能接收用户从键盘输入的100个整数,然后求出其总和、最大值及最小值。
答:
#!
/bin/sh
readmax
min=$max
sum=$max
i=1
while[$i–lt100]
do
readx
sum=`expr$sum+$x`
if[$max–lt$x]
then
max=$x
fi
if[$x–lt$min]
then
min=$x
fi
i=`expr$i+1`
done
echo"sum=$sum;max=$maxmin=$min"
5.创建一个shell脚本,它从用户那里接收10个数,并显示已输入的最大的数。
参考程序:
#!
/bin/bash
max=0
for((count=1;count<=10;count=count+1))
do
echo-n"Enternumber$count:
"
readvalue
if[$max-lt$value]
then
max=$value
fi
done
6.有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?
参考答案:
(1)第一种方法:
用户应使用crontab–e命令创建crontab文件。
格式如下:
00**suncp–r/user/backup/tmp
(2)第二种方法:
用户先在自己目录下新建文件file,文件容如下:
0**suncp–r/user/backup/tmp
然后执行crontabfile使生效。
7.写一个shell脚本,检查给出的串是否为回文(palindrome)。
参考程序:
#!
/bin/bash
echo"Enterstring"
readstr
len=`echo$str|wc-c`
len=`expr$len-1`
l=`expr$len/2`
ctr=1
flag=0
whiletest$ctr-le$l
do
a=`echo$str|cut-c$ctr`
b=`echo$str|cut-c$len`
iftest$a-ne$b
thenflag=1
break
fi
ctr=`expr$ctr+1`
len=`expr$len-1`
done
iftest$flag-eq0
thenecho"Stringispalindrome"
elseecho"Stringnotapalindrome"
fi
8.在UNIX/Linux系统中,环境变量是非常重要,在字符界面下试说明:
(1)PATH变量的作用,如何得到PATH的值?
(2)在UNIX/Linux系统的超级用户的环境变量PATH中允许包含当前目录吗?
(3)若在超级用户的当前目录有可执行文件mypro,如何执行它(写出执行时键盘输入容)?
(4)如何使用该命令在后台执行(写出执行时键盘输入容)?
答:
(1)PATH为命令搜索路径,可用echo$PATH命令显示;
(2)UNIX/Linux的PATH变量不允许包含当前路径(.);(3)./mypro;(4)./mypro&
9.设计一个shell程序计算n的阶乘。
要求:
(1)从命令行接收参数n;
(2)在程序开始后立即判断n的合法性,即是否有参数,若有是否为正整数,若非法请给错误提示;
(3)最后出计算的结果。
参考代码:
#!
/bin/sh
if[$#-eq0];thenecho-e"$0noParams.\a\n";exit0;fi
x=`echo$1|awk'/[^[:
digit:
]]/{print$0}'`
if["x$x"!
="x"];thenecho-e"Input:
$*error!
\a";exit1;fi
fact=1;tmp=1
while[$tmp-le$1]
do
fact=$((fact*tmp));tmp=$((++tmp));
done
echo"fact=$fact"
4.Shell程序中,对用户变量赋值有哪些方式?
简要说明每种赋值方式的使用方法。
(1)等号赋值
1)在等号前后均不能有空格。
2)当需要将一个包含空格的字符串赋给用户变量时,应用单引号将该字符串括起来。
(2)键盘赋值
由read命令来实现的。
用法为:
read用户变量名
当shell程序执行到该行时,将等待用户从键盘输入,
当用户按下回车键时shell把你输入的容赋给用户变量。
(3)命令替换赋值
用法为:
用户变量=`命令`
该语句将首先执行反向单引号之间的命令,
然后将其执行后输出的容赋给该用户变量,在这种赋值方式中,
等号前后同样不能有空格,而且必须用反向单引号(即重音号)把命令括起来。
10.编写1个弹出式菜单的shell程序并实现其简单的菜单功能:
*******************************************************
*MENU*
*1.copy2.rename*
*3.remove4.find*
*5.exit*
*******************************************************
即用户按下数字1,则提示用户输入源和目的文件名后执行复制;输入数字2,则提示用户输入要更名的文件或目录后执行更名操作;输入数字3,则提示用户输入要删除的文件并执行删除操作;输入数字4,则提示用户输入要查找的文件并执行查找操作;输入数字5,则退出该菜单shell程序的执行。
#!
/bin/sh-
clear
while[0];do
echo"************************************************"
echo"menu"
echo"1.copy2.rename"
echo"3.remove4.find"
echo"5.exit"
echo"************************************************"
echo
echo-n"select:
"
readchoice
echo
case$choicein
1)
echo-n"sourcefile:
"
readsrc
echo
echo-n"destinationfold:
"
readdes
cp-arf$src$des
if$?
;then
echo"copysucessful!
"
else
echo"copyfail"
fi;;
2)
echo-n"thefiletoberenamed:
"
readsrc
echo
echo-n"thenewfile:
"
readdes
mv$src$des
if$?
;then
echo"renamesucessful!
"
else
echo"renamefail"
fi;;
3)
echo-n"thefiletoberemoved:
"
readsrc
rm-rf$src
if$?
;then
echo"removesucessful!
"
else
echo"removefail"
fi;;
4)
echo-n"thefiletobefound:
"
readsrc
find$HOME-name$src;;
5)exit;;
*)echo"Invalidoption";;
esac
done
12.编写shell程序,实现自动删除50个用户账号的功能。
账号名为stud1至stud50
#!
/bin/sh
i=1
while[$i-le50]
do
userdel-rstud${i}
i=$(($i+1))
done
echo"removesucessful!
"
else
echo"removefail"
fi;;
3.用shell编写小九九乘法表程序,程序执行结果如下:
#!
/bin/sh–
foriin123456789
do
forjin123456789
do
if(test$j-le$i)then
echo-ne`expr$i\*$j`"\t"
else
echo
break
fi
done
done
13.什么是Shell,它的作用是什么?
答:
shell,就是命令行解释程序,它提供了用户与操作系统之间基于命令行的交互界面。
用
户命令行输入命令,由SHELL对它们做出解释,并将其送往操作系统去执行。
14.用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev目录下。
参考程序:
#!
/bin/sh
FILENAME=
echo“Inputfilename:
”
readFILENAME
if[-c"$FILENAME"]
then
cp$FILENAME/dev
fi
15.请下列shell程序加注释,并说明程序的功能和调用方法。
#!
/bin/sh
#
#/etc/rc.d/rc.httpd
#
#Start/stop/restarttheApachewebserver.
#
#TomakeApachestartautomaticallyatboot,makethis
#fileexecutable:
chmod755/etc/rc.d/rc.httpd
#
case"$1"in
'start')
/usr/sbin/apachectlstart;;
'stop')
/usr/sbin/apachectlstop;;
'restart')
/usr/sbin/apachectlrestart;;
*)
echo"usage$0start|stop|restart";;
esac
参考答案:
(1)程序注释
#!
/bin/sh定义实用的shell
#
#/etc/rc.d/rc.httpd注释行,凡是以星号开始的行均为注释行。
#
#Start/stop/restarttheApachewebserver.
#
#TomakeApachestartautomaticallyatboot,makethis
#fileexecutable:
chmod755/etc/rc.d/rc.httpd
#
case"$1"in#case结构开始,判断“位置参数”决定执行的操作。
本程序携带一个“位置参数”,即$1
'start')#若位置参数为start
/usr/sbin/apachectlstart;;#启动httpd进程
'stop')#若位置参数为stop
/usr/sbin/apachectlstop;;#关闭httpd进程
'restart')#若位置参数为stop
/usr/sbin/apachectlrestart;;#重新启动httpd进程
*)#若位置参数不是start、stop或restart时
echo"usage$0start|stop|restart";;#显示命令提示信息:
程序的调用方法
esac#case结构结束
(2)程序的功能是启动,停止或重新启动httpd进程
(3)程序的调用方式有三种:
启动,停止和重新启动。
3.设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。
参考答案:
#!
/bin/sh
i=1
groupaddclass1
while[$i-le30]
do
if[$i-le9];then
USERNAME=stu0${i}
else
USERNAME=stu${i}
fi
useradd$USERNAME
mkdir/home/$USERNAME
chown-R$USERNAME/home/$USERNAME
chgrp-Rclass1/home/$USERNAME
i=$(($i+1))
done
4.编写shell程序,实现自动删除50个账号的功能。
账号名为stud1至stud50。
参考程序:
#!
/bin/sh
i=1
while[$i-le50]
do
userdel-rstud${i}
i=$(($i+1))
done
5.某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
(1)在下午4:
50删除/abc目录下的全部子目录和全部文件;
(2)从早8:
00~下午6:
00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件;
(3)每逢星期一下午5:
50将/data目录下的所有目录和文件归档并压缩为文件:
backup.tar.gz;
(4)在下午5:
55将IDE接口的CD-ROM卸载(假设:
CD-ROM的设备名为hdc);
(5)在早晨8:
00前开机后启动。
参考答案:
解决方案:
(1)用vi创建编辑一个名为prgx的crontab文件;
(2)prgx文件的容:
5016***rm-r/abc/*
08-18/1***cut-f1/xyz/x1>;>;/backup/bak01.txt
5017***tarzcvfbackup.tar.gz/data
5517***umount/dev/hdc
(3)由超级用户登录,用crontab执行prgx文件中的容:
rootxxx:
#crontabprgx;在每日早晨8:
00之前开机后即可自动启动crontab。
6.设计一个shell程序,在每月第一天备份并压缩/etc目录的所有容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。
Shell程序fileback存放在/usr/bin目录下。
参考答案:
(1)编写shell程序fileback:
#!
/bin/sh
DIRNAME=`ls/root|grepbak`
if[-z"$DIRNAME"];then
mkdir/root/bak
cd/root/bak
fi
YY=`date+%y`
MM=`date+%m`
DD=`date+%d`
BACKETC=$YY$MM$DD_etc.tar.gz
tarzcvf$BACKETC/etc
echo"filebackfinished!
"
(2)编写任务定时器:
echo"001**/bin/sh/usr/bin/fileback">;/root/etcbakcron
crontab/root/etcbakcron
或使用crontab-e命令添加定时任务:
01***/bin/sh/usr/bin/fileback
7.有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?
参考答案:
(1)第一种方法:
用户应使用crontab–e命令创建crontab文件。
格式如下:
00**suncp–r/user/backup/tmp
(2)第二种方法:
用户先在自己目录下新建文件file,文件容如下:
0**suncp–r/user/backup/tmp
然后执行crontabfile使生效。
8.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:
读;文件所有者的权限为:
读、写、执行;文件所有者所在组的权限为:
读、执行。
参考答案:
建立程序Pro16如下:
#!
/bin/sh
i=1
while[i-le50]
do
if[-d/userdata];then
mkdir-p/userdata/user$i
chmod754/userdata/user$i
echo"user$i"
let"i=i+1"(或i=$(($i+1))
else
mkdir/userdata
mkdir-p/userdata/user$i
chmod754/userdata/user$i
echo"user$i"
let"i=i+1"(或i=$(($i+1))
fi
done
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题 07 Shell 编程
![提示](https://static.bdocx.com/images/bang_tan.gif)