2011-11-24 6 views
0

나는이 스크립트를 넣었습니다있는 폴더 빈/bash는 없다 : mal_test.sh를 해당 파일이나 디렉토리의 실행 스크립트

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

나는 다른 디렉토리에서 다음 명령을 실행

을 어떻게 해결합니까 ... 내가 스크립트 파일로 해석되고있는 것 같아요 해당 파일이나 디렉토리

-./mal_test :

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

는하지만 난 오류 발견을 얻을?

감사합니다.

+0

오 ... 첫 번째 줄은 스크립트에 갈 생각되지 않았습니다 :) – sehe

+0

권자 그 오타이었다! – algorithmicCoder

+0

스크립트의 전체 경로를 사용해보십시오. 예 : /home/xx/is-it-malware.sh – malletjo

답변

1

당신은 당신의 그렙에서 확장 된 정규 표현식을 사용하는

1) 꽤 이상 ...이 있습니다. 따라서 -E option을 사용해야합니다. 대신 ';'을 인용 당신의 find 명령에서

2) 당신이 당신의 빈/bash는 디렉토리에 스크립트를 배치하기 때문에 \;

3), 반드시 해당 경로가 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 (답변을 업데이트했습니다.) –

관련 문제