2011-11-24 175 views
0

我有一个文件夹斌/庆典中,我已经把这个脚本:mal_test.sh没有这样的文件或目录执行脚本时

if grep 'php \$[a-zA-Z]*=.as.;' "$1" >/dev/null 
then 
    "!!! $1 is malware!!!" 
else 
    " $1 is fine." 
fi 

我跑在不同的目录下面的命令:

find -type f -exec ./mal_test.sh '{}' ';' 

,但我得到一个错误的发现:./mal_test - 没有这样的文件或目录

我想剧本被解释为一个文件...我该怎样解决?

谢谢!

+0

哦,我...第一行是不应该在脚本中去:) – sehe

+0

大声笑,这是一个错字! – algorithmicCoder

+0

尝试使用脚本的完整路径。例如:/home/xx/is-it-malware.sh – malletjo

回答

1

有相当多的异常...

1)您正在使用您的grep的扩展正则表达式。所以你应该使用 -E option

2)在你的find命令,而不是引用的​​3210做 \;

3)既然你放置脚本在你的bin/bash的目录,确保路径添加到您的PATH环境变量。其他方法是提供脚本所在的整个路径。

4)您的if then else循环中没有echo语句。

5)在您的find命令中,您需要提供要查找文件的路径。使用.作为当前目录。例如find . -type f -exec ./script.sh {} \;

我对脚本进行了以下更改(您可以添加自己的RegEx)。这是我得到的 -

[jaypal~/Temp]$ cat script.sh 
#!/bin/bash 

if grep -E '[a-zA-Z]*' ${1} >/dev/null 
then 
    echo "!!! $1 is malware!!!" 
else 
    echo " $1 is fine." 
fi 

输出:

[jaypal~/Temp]$ find . -type f -exec ./script.sh {} \; 
    ./.mp3 is fine. 
    ./1 is fine. 
!!! ./a.sh is malware!!! 
!!! ./ab.sed is malware!!! 
!!! ./b.sh is malware!!! 
!!! ./backup/GTP_Identifier.sh is malware!!! 
!!! ./backup/GTP_Parser.sh is malware!!! 
!!! ./backup/split.pl is malware!!! 
!!! ./backup/T20111017153052.NEW is malware!!! 
!!! ./backup/T20111025172411.NEW is malware!!! 
!!! ./backup/T20111107193400.NEW is malware!!! 
+1

不相信'grep -E'的评论;它看起来像BRE对我来说,和普通的grep应该没问题。缺失的回声是一个主要问题。使用'';''而不是'\;''''''''''''''''''' - 都没有什么坏处 - 都可以工作(并且我倾向于使用引号而不是反斜杠)。 –

+0

谢谢@JonathanLeffler!对于那个很抱歉。我最近开始研究* nix系统并仍在学习。感谢您的意见。 :) +1(更新了答案) –

相关问题