实验五 Shell程序设计
更新时间:2024-05-28 20:05:01 阅读量: 综合文库 文档下载
- 实验五推荐度:
- 相关推荐
实验五 Shell程序设计
1. 编写一个Shell程序findit,该程序搜索参数1指定的目录树,查找所有的以.c和.h结尾
的文件,如文件行中含有参数指定的字符串,显示该行和相应的文件名。如目录参数1缺省,则从当前目录中搜索。如:findit /home/wang/work searchstring
搜索以/home/wang/work为根的目录树中的c程序和头文件,查找含有searchstring字符串的行,显示文件名。 findit searchstring 从当前目录开始搜索。
2. 编一Shell程序,以类似书本的目录结构的形式,按层次输出当前目录树中的所有目录
和文件,要求每一层缩进4个空格。
/* sockcom.h */ #include
#define BUFSIZE 1024 #define PORT 3333
typedef struct fileinfo { char fname[50]; long length;
}FILEINFO, *Pfileinfo; /*
* SocketServer.c * */
#include \
int initSocket() { int sockfd, length; struct sockaddr_in server; char buf[BUFSIZE];
sockfd=socket(AF_INET, SOCK_STREAM,0);
if (sockfd<0) error(\ server.sin_family=AF_INET; server.sin_addr.s_addr=INADDR_ANY; server.sin_port=htons(PORT); if (bind(sockfd,(struct sockaddr *)&server, sizeof(server))<0) error(\ length=sizeof(server); if (getsockname(sockfd, (struct sockaddr *)&server, &length)<0) printf(\
printf(\ listen(sockfd, 5); return sockfd; }
int main(int argc, char *argv[]) { int sockfd, newsockfd, length, n; char buf[BUFSIZE]; sockfd = initSocket();
while(1) { newsockfd = accept(sockfd, (struct sockaddr *)0, (int *)0); int pid; if ((pid=fork())>0) { close(sockfd); bzero(buf, sizeof(buf)); FILEINFO fileinfo; bzero(fileinfo.fname, sizeof(fileinfo.fname)); if ((n = read(newsockfd, &fileinfo, sizeof(fileinfo)))<0) error(\
printf(\length: %d\\n\ int fd=creat(fileinfo.fname, 0644); long received=0; while((n=read(newsockfd, buf, BUFSIZE))>0) { write(fd, buf, n); received+=n; if (received==fileinfo.length) {
break;
fileinfo.fname); }
}
}
close(fd);
printf(\
exit(0); }
close(newsockfd);
return 0; }
#include
void error(char *msg) { printf(\ exit(1); }
#include \
int initSocket(char *rhost) { int sockfd; struct sockaddr_in server; struct hostent *hp, *gethostbyname(); sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd<0) error(\ if ((hp=gethostbyname(rhost))==NULL) error(\rhost); server.sin_family = AF_INET; bcopy((char *)hp->h_addr, (char *)&server.sin_addr.s_addr, hp->h_length); server.sin_port=htons(PORT); if(connect(sockfd, (struct sockaddr *)&server, sizeof(server))<0) error(\ return sockfd;
}
int main(int argc, char *argv[]) { if (argc!=4) { error(\ } printf(\ int n; char buf[BUFSIZE]; char *filename = argv[1]; FILEINFO fileinfo; strcpy(fileinfo.fname, argv[3]); int fd = open(filename, O_RDONLY); fileinfo.length = lseek(fd,0L,SEEK_END); printf(\ int sockfd=initSocket(argv[2]); if(write(sockfd, &fileinfo, sizeof(fileinfo))<0) error(\metadata.\ lseek(fd, 0L, SEEK_SET); }
第二种情况:
第一种情况是两层次的目录是父子关系,因此可以上面的方法实现。若两个层次上的目录并不是直接的父子关系,这时候在用上面的方法显然不合适。这里采用更加简洁的方法,第一种情况亦可以用。
#!/bin/bash
for dir in `find . -name clean.sh` do
path=`dirname $dir` if [ $path != . ]
while((n=read(fd, buf, BUFSIZE))>0) { write(sockfd, buf, n); }
close(fd);
printf(\close(sockfd); return 0;
then echo $path cd $path . clean.sh cd - fi
#! /bin/bash
#将自变量形式给出的目录下的全部普通文件名和权限列出
k=`echo $1|sed 's/\\/$//'`
for i in $k/* do
if [ -f \ then
j=`ls -l \ echo -e \ fi done
正在阅读:
实验五 Shell程序设计05-28
住房外煞的化解之道08-14
高绩效团队建设讲解08-14
浅谈学校食堂管理12-16
党性剖析材料08-14
医疗改革的困境08-14
最新整理检验科PCR室作业指导书讲解学习04-16
上海市徐汇区2014-2015学年八年级(上)期末物理试卷(解析版)01-14
竞赛试题选编之排列组合01-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 程序设计
- 实验
- Shell
- 中国石油大学Linux实验报告
- 低密度聚乙烯釜式毕业设计
- 导游1000道题
- 2007江西九江某楼盘销售手册 - secret - 图文
- 市场营销复习要点
- 教室卫生评分细则
- 牛老村隧道实施性施工技术方案
- 29例腹部手术后肠外瘘的治疗分析
- 公务员考试申论范文精选内容
- 2018年5月福建省厦门市中考数学模拟试卷(有答案)
- 三角形的五心一次看个够
- 鲁教版二年级语文下册课程纲要
- 高层建筑施工组织设计
- 重温校园恋爱 - 学院情侣主题创意结婚照片 - 图文
- 5-KRONES线灌装机操作S0P
- 孩子对学习没热情
- 《桂花雨》第二课时教学设计
- 速冻鸡产品项目可行性研究报告(发改立项备案+2013年最新案例范文
- 神经外科诊疗指南 - - 技术操作规范1要点
- 时空三部曲的帖子《和讯》