2011-11-24 120 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(更新了答案) –

相關問題