习题07Shell编程.docx

上传人:b****7 文档编号:11144822 上传时间:2023-02-25 格式:DOCX 页数:18 大小:31.22KB
下载 相关 举报
习题07Shell编程.docx_第1页
第1页 / 共18页
习题07Shell编程.docx_第2页
第2页 / 共18页
习题07Shell编程.docx_第3页
第3页 / 共18页
习题07Shell编程.docx_第4页
第4页 / 共18页
习题07Shell编程.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

习题07Shell编程.docx

《习题07Shell编程.docx》由会员分享,可在线阅读,更多相关《习题07Shell编程.docx(18页珍藏版)》请在冰豆网上搜索。

习题07Shell编程.docx

习题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文件中的内容:

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`

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1