编一个Shell程序picknl.sh,其具有三个位置参数,第一个位置参数为字符串模式,第二个位置参数为目录名,第三个位置参数为最大的搜索层数。该程序在参数2指定的整个目录树中对所有的C程序和头文件搜索参数1指定的字符串模式,并输出该模式的文件名和所在行号

admin2016-05-14  18

问题 编一个Shell程序picknl.sh,其具有三个位置参数,第一个位置参数为字符串模式,第二个位置参数为目录名,第三个位置参数为最大的搜索层数。该程序在参数2指定的整个目录树中对所有的C程序和头文件搜索参数1指定的字符串模式,并输出该模式的文件名和所在行号。最大的目录搜索深度由参数3指定。参数1和参数2都不可省略,如参数3省略,只搜索指定目录这一层。例如:picknl string dir 3表示在dir目录树的C程序和头文件中搜索模式string的字符串,最大的搜索深度限制为3层。

选项

答案程序清单21-2的Shell程序在第二个位置参数指定的目录树下的C程序和头文件中搜索模式第一个位置参数指定的字符串模式,最大的搜索深度限制为3层。 程序清单21-2:picknl.sh #!/bin/sh #picknl.sh if[$#-1t2];then echo"parameter error". exit fi if[$#-eq3];then level=$3 else level=1 {}参数3缺省 fi if[$level-ge1];then #搜索最后一层 cd$2 for i in*.[ch];do {}对于目录中的每一个C文件和头文件 grep-Hn$1$i #搜索参数1指定的字符串模式,并印出文件名和行号 done for i in*;do #对于目录中的每一项 if[-d$i];then #如是目录 ( 通过创建子进程执行 cd$i level=t’expr $level-1’ #搜索层数减1 picknl.sh$1.$level #递归调用,picknl.sh所在的目录要处于 {}查找路径中(在环境变量$PAAH中定义) ) fi done fi。

解析
转载请注明原文地址:https://kaotiyun.com/show/reNx777K
本试题收录于: 操作系统题库理工类分类
0

最新回复(0)