您好,欢迎访问三七文档
期末考核内容每人按照老师的要求,顺序或随即从下面shell编程部分和环境编程部分分别选择一题,然后在课堂上进行编程、演示运行结果,并回答老师至少三个问题。如不能回答,则不通过考核。通过考核后,应根据两个题目的题目分析、编程思想、相关知识、流程图、算法设计(如有)、源代码及注释,完成实践课程报告,并打印后提交。老师根据平时考勤、演示结果、回答问题情况、实验报告情况打分。定于第九周周四上午进行考核。请各位同学做好准备。Shell编程部分:1、设计一个程序cuts,它由标准输入读取数据,获取有第一个参数n和第二个参数m所限定范围的数据,n和m都是整数,即从输入的字符串中抽取第n个字符至第m个字符之间的所有字符(包括这两个字符)并显示出来。$cuts1114Thisisatestofcutsprogram(回车)test(显示结果)P1454.18#!/bin/bashread-p请输入一段内容:TEXTread-p请输入两个整数,中间用空格分开:num1num2echo$TEXT|cut-b$num1-$num22/dev/null2、利用for循环将当前目录下的.c文件移到指定的目录下,并按文件大小排序,显示移动后指定目录的内容。P1444.12#!/bin/bashforfilein`ls-1/root/a|grep.*.c`{mv/root/a/$file/root/b}ls-lS/root/b3、编写一个shell脚本,求斐波那契奇数列的前10项及总和。P1444.14#!/bin/bashi=1j=0for((k=0;k10;k++))doecho-n$iletm=ileti+=jletj=mdoneecho4、编写一个shell脚本,程序运行时,要求输入两个数字。然后判断数字的大小,如果两个数字的和大于100,就输出“x+y100”;如果两个数字的和小于等于100并且大于10,就输出“x+y10”;如果xy,则求出x除以y的余数并输出“xmody=?(把计算的值代替问号)”,否则求出y除以x的余数并输出“ymodx=?”.P127例4.135、编写一个shell脚本,并利用函数实现数列求和运算。即主程序接受两个数字,分别作为数列头和数列尾,如果第一个数字不小于第二个数字则输出“wrongnumber”,否则将这两个数字传递给函数;函数把这两个数字中间的数字加起来求和,并输出。如:当输入36时,函数计算3+4+5+6的值并输出。#!/bin/shfun(){sum=0foriin`seq$1$2`dosum=`expr$i+$sum`doneecho$sum}echoPleaseinput2number:readabexpr$a+01/dev/null2&1if[[$?-ne0]];thenechowrongnumberexit1;fiexpr$b+01/dev/null2&1if[[$?-ne0]];thenechowrongnumberexit1;fiif[[$a-ge$b]];thenechowrongnumberexit1;fifun$a$b6、编写特洛伊木马shell脚本。以文本方式登陆界面,接收用户输入的名字和密码。一旦用户在这种伪装界面登陆,就获取用户名和密码,并保存在指定的文件中。接着睡眠几秒,然后显示录入错误的信息,使用户以为输入有误。最后在调用真正的登陆程序,允许用户正常登陆。P107例4.67、编写shell脚本,创建一个5个元素的数组,输出各个元素的值8、编写一个脚本,用于统计所指定文件的行数总数。输出结果为各个文件的名字+行数,以及总行数。如:当输入./脚本名file1file2,脚本计算file1和file2两个文件的总行数#!/bin/bash#statisticstherawsofthefilesyouinputusage(){echousage:pleaseinput=twofilenames}totalline=0if[$#-lt2];thenusagefiwhile[$#-ne0]doline=`cat$1|wc-l`echo$1:$linetotalline=$[$totalline+$line]shiftdoneecho--------echototalline:$totalline9、编写一个shell脚本,根据键盘输入的值,给出对应的提示;输入[A–Z],输出UppercaseLetter;输入[a-z],输出LowercaseLetter;输入[0-9],输出Digit;输入其他,输出Punctuation,whitespace,orother#!/bin/bashexportLC_ALL=Creadawhile[$a]docase$ain[A-Z])echoUppercaseLetter;;[a-z])echoLowercaseLetter;;[0-9])echoDigit;;*)echoPunctuation,whitespace,orother;;esacreadadone10、编写shell脚本,提示用户输入用户名,并判断此用户名是否存在与系统用户中P123例4.11Linux环境编程部分:1、编写一个程序,把一个文件的内容复制到另一个文件上,即实现简单的copy功能,要求:只用open()/read()/write()/close()系统调用,程序的第一个参数为源文件,第二个参数为目的文件。P2257.3#includestdio.h#includestdlib.h#includeunistd.h#includesys/types.h#includesys/stat.h#includefcntl.h#defineBUF_SIZE1024*8intmain(){intfds,fdd;charbuf[BUF_SIZE];size_thasread=0;fds=open(filea,O_RDONLY);fdd=open(fileb,O_WRONLY,O_CREAT);if(fds&&fdd){while((hasread=read(fds,buf,sizeof(buf)))0){write(fdd,buf,hasread);}close(fds);close(fdd);}}2、编写一个程序它利用fork()创建一个子进程;父进程打开一个文件,父子进程都向文件中写入信息(利用write),表明是在那个进程中;每个进程都打印两个进程的ID号。最后父进程执行wait()。P2257.5#includestdio.h#includeunistd.h#includemalloc.h#includefcntl.h#includestring.h#includestdlib.hintmain(){pid_tpid;intfd;char*buf1=(char*)malloc(20);char*buf2=(char*)malloc(20);strcpy(buf1,thisischildprocess:);strcpy(buf2,thisisparentprocess:);if(fd=open(file,O_CREAT|O_RDWR)0){printf(openfileerror);}if(pid=fork()==0){if(write(fd,buf1,strlen(buf1))0){printf(writeerror!);exit(0);}printf(pid:%d,getpid());close(fd);}else{if(write(fd,buf2,strlen(buf1))0){printf(writeerror!);exit(0);}close(fd);wait(NULL);printf(ppid:%d,getppid());}return0;}3、编写一个程序,他创建一个子进程。父进程向子进程发送一个信号,然后等待子进程终止;子进程接受信号,输出自己的状态信息,最后终止自己。P2257.9#includestdio.h#includeunistd.h#includemalloc.h#includefcntl.h#includestring.h#includestdlib.hintmain(){pid_tpid;intfd;char*buf1=(char*)malloc(20);char*buf2=(char*)malloc(20);strcpy(buf1,thisischildprocess:);strcpy(buf2,thisisparentprocess:);if(fd=open(file,O_CREAT|O_RDWR)0){printf(openfileerror);}if(pid=fork()==0){if(write(fd,buf1,strlen(buf1))0){printf(writeerror!);exit(0);}printf(pid:%d,getpid());close(fd);}else{if(write(fd,buf2,strlen(buf1))0){printf(writeerror!);exit(0);}close(fd);wait(NULL);printf(ppid:%d,getppid());}return0;}4、写管道的程序打开管道,main函数里的参数由用户输入要写入的内容。读管道创建管道,读出了用户写入用户写入管道的内容。这两个函数用的是非阻塞度写管道5、打开open函数创建的文件,然后对此文件进行读写操作(将文件打开属性改为可读可写,文件权限要做相应更改)。接着,写入“Hello!Iamwritingtothisfile!”,此时文件指针位于文件尾部。接着再使用lseek函数将文件指针移动文件开始处,并读出10个字节并将其打印出来#includestdio.h#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h#includestring.hintmain(){intfd=-1;fd=open(zhidao_561804018.dat,O_CREAT|O_TRUNC|O_RDWR,0666);if(fd0){perror(open);return-1;}charbuff[64];strcpy(buff,Hello!Iamwritingtothisfile!);intcount=strlen(buff);if(write(fd,buff,count)0){perror(write);return-1;}if(lseek(fd,0,SEEK_SET)0){perror(lseek);return-1;}if(read(fd,buff,10)0){perror(read);return-1;}buff[10]=0x00;printf(%s\n,buff);if(fd0){close(fd);fd=-1;}return0;}6、首先建立一个守护进程,然后让该守护进程每隔10s在/tmp/dameon.log中写入一句话#includestdio.h#includestdlib.h#includestring.h#includefcntl.h#includesys/types.h#includeunistd.h#includesys/wait.h#defineMAXFILE65535intmain(void){pid_tpc;inti,fd,len;char*buf=ThisisaDameon\n;len=strlen(buf);pc=fork();if(pc0){printf(errorfork\n);exit(1);}elseif(pc0)exit(0);setsid();ch
本文标题:期末考核题目汇总
链接地址:https://www.777doc.com/doc-1752125 .html