cd $1
array1=`find . -name "*.c" -o -name "*.h" -o -name "*.s" `
cd $2
array2=`find . -name "*.c" -o -name "*.h" -o -name "*.s" `
echo $array1 > tempf1
echo $array2 > tempf2
`sed "s/ /\n/g" tempf1 > temp1`
`sed "s/ /\n/g" tempf2 > temp2`
diff temp1 temp2 > labDiff
cat labDiff
rm tempf1 tempf2 temp1 temp2
因为,给本科生辅导实验的缘故。需要统计下每一次实验代码之间到底增加了几个文件。虽然是一个很简单的流程。但是,想通过脚本来实现。本来想使用python,但是由于自己对python不够熟悉,而且明显linux文件下操作没有shell好用。所以,使用shell来完成。
代码完成的功能是比较两个文件夹下,源代码发生的变化。比如说./lab2和./lab3下的变化,因为我们的实验是连续性质的,以后的实验需要在之前的基础上新添加几个文件夹充实实验的内容。首先,使用find命令查找本地文件夹下所有的源代码文件,最好是相对文件名而不是绝对地址。因为,为了方便下一步的比较。find命令产生的数据是以空格分隔的文件名称。不能使用diff直接进行比对,所以要使用sed将空格替换成回车。将生成的字符串保存到文件中,然后比较两个文件。得到两个文件夹下源代码的变化情况。
在实现的过程中,遇到一些问题。因为使用shell比较少,所以想使用数组将所有的文件名字保存起来,然后,自己实现算法比较两个数组中元素的不同。结果,发现shell命令得到元素都是流数据,要保存到数组中很麻烦。而且shell中数组使用起来也不是特别方便。这里也不太清楚shell中有没有什么好的容器。只能放弃这个思路。
还有,使用sed将空格替换为回车时。发现echo $array1产生的数据流通过管道传递到sed中时,sed命令无法完成替换功能。只能首先将数据保存到文件中,再直接使用sed命令读取文件。
总结:
最近一直觉得自己需要掌握一门脚本语言,用来快速实现一些自己的想法。一直也觉得Python是一个很好的解决方案,但是没有时间去学习。学习一门脚本语言,应该在平时生活中不断去使用,慢慢积累经验。而且,要尽快实现功能。虽然,可能实现的不够优美,但是使用脚本语言本身就是为了快速开发实现。在使用中
学习语言,多使用脚本来
实现自己的想法。这两个内容刚好相辅相成,互相促进。