习题07Shell编程Word格式文档下载.docx
- 文档编号:22966270
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:18
- 大小:27.38KB
习题07Shell编程Word格式文档下载.docx
《习题07Shell编程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《习题07Shell编程Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
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〞
#〔1〕使用/bin/bash解释脚本
#〔2〕将位置变量1赋值给变量dir
#〔3〕如果dir所指为目录
#〔4〕将当前目录改为dir
#〔5〕如果循环变量file所指是普通文件
#〔6〕显示文件file的容6分
假如命令行参数是一个合法目录如此显示该目录下所有普通文件的容,否如此显示错误的目录名信息。
4.试编写一个SHELL程序,该程序能接收用户从键盘输入的100个整数,然后求出其总和、最大值与最小值。
readmax
min=$max
sum=$max
i=1
while[$i–lt100]
do
readx
sum=`expr$sum+$x`
if[$max–lt$x]
max=$x
if[$x–lt$min]
min=$x
fi
i=`expr$i+1`
done
sum=$sum;
max=$maxmin=$min"
5.创建一个shell脚本,它从用户那里接收10个数,并显示已输入的最大的数。
参考程序:
/bin/bash
max=0
for((count=1;
count<
=10;
count=count+1))
echo-n"
Enternumber$count:
"
readvalue
if[$max-lt$value]
max=$value
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〕。
Enterstring"
readstr
len=`echo$str|wc-c`
len=`expr$len-1`
l=`expr$len/2`
ctr=1
flag=0
whiletest$ctr-le$l
a=`echo$str|cut-c$ctr`
b=`echo$str|cut-c$len`
iftest$a-ne$b
thenflag=1
break
ctr=`expr$ctr+1`
iftest$flag-eq0
thenecho"
Stringispalindrome"
elseecho"
Stringnotapalindrome"
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)最后出计算的结果。
参考代码:
if[$#-eq0];
thenecho-e"
$0noParams.\a\n"
;
exit0;
x=`echo$1|awk'
/[^[:
digit:
]]/{print$0}'
`
if["
x$x"
!
="
x"
Input:
$*error!
\a"
exit1;
fact=1;
tmp=1
while[$tmp-le$1]
fact=$((fact*tmp));
tmp=$((++tmp));
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];
************************************************"
menu"
1.copy2.rename"
3.remove4.find"
5.exit"
echo
select:
readchoice
case$choicein
1)
echo-n"
sourcefile:
readsrc
destinationfold:
readdes
cp-arf$src$des
if$?
then
echo"
copysucessful!
else
copyfail"
fi;
2)
thefiletoberenamed:
echo
thenewfile:
readdes
mv$src$des
if$?
renamesucessful!
renamefail"
3)
thefiletoberemoved:
rm-rf$src
removesucessful!
removefail"
4)
thefiletobefound:
find$HOME-name$src;
5)exit;
*)echo"
Invalidoption"
esac
12.编写shell程序,实现自动删除50个用户账号的功能。
账号名为stud1至stud50
while[$i-le50]
userdel-rstud${i}
i=$(($i+1))
编写小九九乘法表程序,程序执行结果如下:
/bin/sh–
foriin123456789
forjin123456789
do
if(test$j-le$i)then
echo-ne`expr$i\*$j`"
\t"
echo
break
fi
done
13.什么是Shell,它的作用是什么?
shell,就是命令行解释程序,它提供了用户与操作系统之间基于命令行的交互界面。
用
户命令行输入命令,由SHELL对它们做出解释,并将其送往操作系统去执行。
14.用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev目录下。
FILENAME=
echo“Inputfilename:
〞
readFILENAME
if[-c"
$FILENAME"
]
cp$FILENAME/dev
fi
15.请如下shell程序加注释,并说明程序的功能和调用方法。
#
#Start/stop/restarttheApachewebserver.
#TomakeApachestartautomaticallyatboot,makethis
case"
$1"
in
'
start'
)
/usr/sbin/apachectlstart;
stop'
/usr/sbin/apachectlstop;
restart'
/usr/sbin/apachectlrestart;
*)
usage$0start|stop|restart"
;
参考答案:
〔1〕程序注释
/bin/sh定义实用的shell
#/etc/rc.d/rc.d注释行,但凡以星号开始的行均为注释行。
in#case结构开始,判断“位置参数〞决定执行的操作。
本程序携带一个“位置参数〞,即$1
)#假如位置参数为start
#启动d进程
)#假如位置参数为stop
#关闭d进程
#重新启动d进程
*)#假如位置参数不是start、stop或restart时
#显示命令提示信息:
程序的调用方法
esac#case结构完毕
〔2〕程序的功能是启动,停止或重新启动d进程
〔3〕程序的调用方式有三种:
启动,停止和重新启动。
3.设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。
/bin/sh
groupaddclass1
while[$i-le30]
if[$i-le9];
USERNAME=stu0${i}
else
USERNAME=stu${i}
useradd$USERNAME
mkdir/home/$USERNAME
chown-R$USERNAME/home/$USERNAME
chgrp-Rclass1/home/$USERNAME
i=$(($i+1))
4.编写shell程序,实现自动删除50个账号的功能。
账号名为stud1至stud50。
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文件中的容:
rootxxx:
#crontabprgx;
在每日早晨8:
00之前开机后即可自动启动crontab。
6.设计一个shell程序,在每月第一天备份并压缩/etc目录的所有容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。
Shell程序fileback存放在/usr/bin目录下。
〔1〕编写shell程序fileback:
DIRNAME=`ls/root|grepbak`
mkdir/root/bak
cd/root/bak
YY=`date+%y`
MM=`date+%m`
DD=`date+%d`
tarzcvf$BACKETC/etc
〔2〕编写任务定时器:
001**/bin/sh/usr/bin/fileback"
>
/root/etcbakcron
crontab/root/etcbakcron
或使用crontab-e命令添加定时任务:
01***/bin/sh/usr/bin/fileback
7.有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?
8.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:
读;
文件所有者的权限为:
读、写、执行;
文件所有者所在组的权限为:
读、执行。
建立程序Pro16如下:
while[i-le50]
if[-d/userdata];
mkdir-p/userdata/user$i
chmod754/userdata/user$i
user$i"
let"
i=i+1"
〔或i=$〔〔$i+1〕〕
mkdir/userdata
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题 07 Shell 编程