# !/bin/bash
#在某个目录下所有文件中进行查找字符串
#该bash第一个参数代表目录,第二个参数代表查找内容
#返回文本名和字符串坐在行
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#判断参数是否正确
if [ $# -ge 2 ]; then
directory=$1
stringname=$2
else
echo -e "you must input the directory and string"
fi
#递归获得所有文件名
function searchfile()
{
filenames=`ls $1`
for filename in $filenames
do
filename=${1}"/"$filename
if [ -d $filename ] ; then
#为目录是递归下去查找文件
#echo "$filename"
cd $filename
#exit
searchfile $filename
cd .. # 记得递归完成后要返回到原始目录,有点类似回溯法(循环+递归)
elif [ -f $filename ] ; then
searchstring $filename
else
echo "None"
fi
done
}
#在文件中查找我们需要的字符串并且获取行号,其功能其实是可以用grep -n 查找内容代替的
function searchstring()
{
links=`wc -l $1 | cut -d " " -f1`
for ((i=1;i<=$links;i++))
do
words=`head -$i $1|tail -1 `
#echo $words
for word in $words
do
#echo $word
test $word == $stringname && echo "--------------- $1 行号: $i---------------"&& echo "该行内容为:$words"
done
done
}
searchfile $directory
在写的过程中发现几点需要注意的:
1。变量的使用。除了初始化的时候,一般使用变量时都应该注意是否要使用$,而且一般的情况都是要得。
2. 路径的问题。在命令行pash下我们都会有当前路径,所以可以使用相对路径,但是在自己写脚本时,应该使用绝对路径比较好