2017-09-14 5 views
0

중첩 된 if-else 문을 사용하여 파일을 검색하는 스크립트가 있습니다. 중첩 된 명령문 중 하나에 대해 조건이 충족되면 스크립트를 종료하겠습니다.일단 조건이 충족되면 중첩 된 if-else 문을 종료/중단하는 방법

그러나 스크립트는 여전히 나머지 모든 if-else 문을 계속 실행합니다.

나는 exit 0을 사용하여 테스트했지만 0을 반환하지만 어느 것도 작동하지 않습니다. 나는 더 나은 방법은 각 검색을 반복하는 while 루프를 사용하는 것으로 나타났습니다

#!/bin/sh 

PATH1=/filer1_vol1_dir1 
PATH2=/filer2_vol1_dir1 
PATH3=/filer3_vol1_dir2 
PATTERN=fruits 

find $PATH1 -type f -name "*$PATTERN*" -exec ls -l {} \; >> /tmp/${PATTERN}_search 

if [[ -s /tmp/${PATTERN}_search && `grep -i apples /tmp/${PATTERN}_search` ]] 
then 
     echo "Matching files have been found under $PATH1" 
     cat /tmp/${PATTERN}_search 
     return 0 
else 
     echo "No matching files, proceeding to search $PATH2" 
     find $PATH2 -type f -name "*$PATTERN*" -exec ls -l {} \; >> /tmp/${PATTERN}_search 

     if [[ -s /tmp/${PATTERN}_search && `grep -i apples /tmp/${PATTERN}_search` ]] 
     then 
       echo "Matching files have been found under $PATH2" 
       cat /tmp/${PATTERN}_search 
       return 0 
     else 
       echo "No matching files, proceeding to search $PATH3" 
       find $PATH3 -type f -name "*$PATTERN*" -exec ls -l {} \; >> /tmp/${PATTERN}_search 

       if [[ -s /tmp/${PATTERN}_search && `grep -i apples /tmp/${PATTERN}_search` ]] 
       then 
         echo "Matching files have been found under $PATH3" 
         cat /tmp/${PATTERN}_search 
         return 0 
       else 
         echo "No file matches, please search elsewhere" 
         return 0 
       fi 
     fi 
fi 

exit 0 

답변

0

:

여기 스크립트입니다. 각 반복 내에서 if-else 조건은 find 패턴과 일치하는 파일이 있는지 테스트합니다. 이 조건이 true가되면 break 문이 스크립트를 중지 할 수 있습니다. 아래

샘플 스크립트 :

#!/bin/sh 

PATH1=/filer1_vol1_dir1 
PATH2=/filer2_vol1_dir1 
PATH3=/filer3_vol1_dir2 
PATTERN=fruits 

echo $PATH1 > /tmp/PATH.list 
echo $PATH2 >> /tmp/PATH.list 
echo $PATH3 >> /tmp/PATH.list 
echo /tmp/PATH.list contains 
cat /tmp/PATH.list 
echo 

cat /dev/null > /tmp/${PATTERN}_search.list 

while read PATH 
do 

echo "Searching under the following parameters" 
echo PATTERN = $PATTERN 
echo PATH = $PATH 
echo 
/usr/bin/find $PATH -type f -name "*$PATTERN*" -exec ls -l {} \; >> /tmp/${PATTERN}_search.list 

/usr/bin/grep -i apples /tmp/${PATTERN}_search.list 
if [ $? -eq 0 ] 
then 
    echo "All matching files have been found." 
    break 
else 
    echo "No matches found, continuing search in next directory." 
fi 

done < /tmp/PATH.list 

exit 0