2013-08-01 8 views
1

나는 유형 FileName_trojan.sh, FileName_virus.sh, FileName_worm.sh의 모든 파일을 찾고 싶어요. 그런 파일이 있으면 메시지를 표시하십시오.중괄호 확장 - 너무 많은 표현

여기에 파일 이름이 스크립트에 전달되는 인수입니다.

#!/bin/bash 
file=$1 
if [ -e "$file""_"{trojan,virus,worm}".sh" ] 
then 
echo 'malware detected' 

중괄호 확장을 시도했지만 작동하지 않았습니다. "너무 많은 인수"오류가 발생합니다. 어떻게 수정합니까? OR 조건으로 만 할 수 있습니까?

또한,이 작동하지 않습니다 -

-e "$file""_trojan.sh" -o "$file""_worm.sh" -o "$file""_virus.sh" 

답변

2

-e 연산자는 하나의 인수를 취할 수 있습니다; 중괄호 확장은 인수를 -e에 전달하기 전에 확장되므로 두 개의 추가 인수가 있습니다. 당신은 루프 사용할 수 있습니다

for t in trojan virus worm; do 
    if [ -e "{$file}_$t.sh" ]; then 
     echo "malware detected" 
    fi 
do 

또는 내가 입력 완료 전에 마크가 제안 :

for f in "${file}_"{trojan,virus,worm}.sh; do 
    if [ -e "$f" ]; then 
     echo "malware detected" 
    fi 
done 
+0

또는 심지어 '여성 "$ {파일}"에 대한 _ {트로이 목마, 바이러스, 웜} .sh; if [-e "$ f"]; 그런 다음 "맬웨어가 탐지 됨"을 표시합니다. fi; done' –

+0

Jinx. 너는 내게 코카인을 빚지고있다. – chepner

+0

BTW, 왜 우리는 {$ file} _ $ t.sh에 중괄호를 넣을 까? $ file을 사용할 수 없습니까? 나는 그것을 시도하고 나는 오류가있어. – Steam

1

문제는 확장하지, 그것을 확인했다. 문제는 -e 테스트에서 발생합니다. 3 가지가 아니라 하나의 인수 만 사용합니다.

가능한 해결 방법 :

i=0 
for f in "$1"_{trojan,virus,worm}.sh ; do 
    [ -e "$f" ] && ((i++)) 
done 
if ((i)) ; then 
    echo Malware detected. 
fi