LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 911|回复: 7

请大虾们帮帮忙-<MD5检查的shell程序>

[复制链接]
发表于 2006-6-17 18:55:01 | 显示全部楼层 |阅读模式
小弟最近在学着写shell程序,可是写出来了就是一直测试不过,都快疯了!
请大虾们帮小弟看看这个shell程序到底有些什么问题

md5check.sh

  1. #!/bin/sh
  2. PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/mysql/bin
  3. TODAY=`date`
  4. file1=/etc/passwd
  5. file2=/etc/services
  6. file3=/etc/rc.local
  7. md5_home=/root/test
  8. I=1
  9. N=3

  10. md5_file ()
  11. {
  12. filename=`basename $1`
  13. if [! -f "$md5_home/$filename.md5"] ;
  14.    then
  15.       md5sum $1 > $md5_home/$filename.md5;
  16. fi
  17. return 0
  18. }

  19. check() {
  20. if [-f "$1"] ;
  21.   then
  22.   NUM=`diff -q $md5_home/$filename.md5 `md5sum $1` | wc -l`    # 6/18 modify
  23.   NUMBER=`expr NUM`
  24.      if ["$NUMBER" = "1"] ;
  25.        then
  26.           echo "The file $1 have been changed! Today is $TODAY" >> $md5_home/result.error
  27.        else
  28.           echo "The file $1 is right! Today is $TODAY" >> $md5_home/result.right
  29.      fi
  30.   else
  31.      echo "The file $1 is not exist! Today is $TODAY" >> $md5_home/result.delete
  32. fi  
  33. return 0
  34. }

  35. while $I<=$N
  36.   do
  37.       MIDFILE="$`file$i`"
  38.       if [-f "$MIDFILE"];
  39.          then
  40.            md5_file "$MIDFILE"
  41.            check "$MIDFILE"
  42.       fi
  43.       I="$I+1"
  44.   done

  45. # End of script
复制代码
发表于 2006-6-17 20:46:59 | 显示全部楼层
filename=`echo $1 | awk -F "/" '{print $NF}'`

filename=`basename $1`

diff -q /root/master_password $MD5TEMP

这个根本有错误,你这样相当于diff /root/master_password和文件名为当前/etc/passwd的md5值的一个文件(当然不存在)。这里diff的用法是

md5sum $1 | diff -q /root/master_password -

后面expr,NUM,NUMBER这些都是多余的,判断diff返回值就可以了,cmp更合适。

md5sum $1 | cmp -s /root/master_password -

后面还没看明白。
回复 支持 反对

使用道具 举报

发表于 2006-6-17 20:54:45 | 显示全部楼层
  1. for i in `seq 3` # or for i in {1..3}
  2. do
  3. eval MIDFILE=\$file$i
  4.         if [ -f $MIDFILE ]; then
  5.                 md5_file $MIDFILE
  6.                 check $MIDFILE
  7.         fi
  8. done
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-6-17 21:08:34 | 显示全部楼层
你是把3个文件的md5sum存储在一个文件中?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-17 23:10:53 | 显示全部楼层
多谢指教!
我是把每个文件的md5存在各自的文件中:
md5sum $1 > $md5_home/$filename.md5
回复 支持 反对

使用道具 举报

发表于 2006-6-17 23:15:19 | 显示全部楼层
不,我是说原始的md5sum,也就是/root/master_password这个文件。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-18 00:17:21 | 显示全部楼层
md5sum $1 > $md5_home/$filename.md5 这个里面就是原始的md5数据,我后面要比较的时候再临时生成一个md5的数据和这个原始的比就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-18 00:27:11 | 显示全部楼层
我当时写错了,改了一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表