习题07Shell编程.docx
- 文档编号:14452050
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:18
- 大小:29.42KB
习题07Shell编程.docx
《习题07Shell编程.docx》由会员分享,可在线阅读,更多相关《习题07Shell编程.docx(18页珍藏版)》请在冰点文库上搜索。
习题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〕
#〔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;;
编写小九九乘法表程序,程序执行结果如下:
#!
/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
#
#
#Start/stop/restarttheApachewebserver.
#
#TomakeApachestartautomaticallyatboot,makethis
#
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.d注释行,但凡以星号开始的行均为注释行。
#
#Start/stop/restarttheApachewebserver.
#
#TomakeApachestartautomaticallyatboot,makethis
#
case"$1"in#case结构开始,判断“位置参数〞决定执行的操作。
本程序携带一个“位置参数〞,即$1
'start')#假设位置参数为start
/usr/sbin/apachectlstart;;#启动d进程
'stop')#假设位置参数为stop
/usr/sbin/apachectlstop;;#关闭d进程
'restart')#假设位置参数为stop
/usr/sbin/apachectlrestart;;#重新启动d进程
*)#假设位置参数不是start、stop或restart时
echo"usage$0start|stop|restart";;#显示命令提示信息:
程序的调用方法
esac#case结构结束
〔2〕程序的功能是启动,停止或重新启动d进程
〔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/*
5017***tarzcvfbackup.tar.gz/data
5517***umount/dev/hdc
〔3〕由超级用户登录,用crontab执行prgx文件中的内容:
root@xxx:
#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`
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 编程