Как выйти/выйти из вложенного оператора if-else после выполнения условий

У меня есть скрипт, который использует вложенные операторы if-else для поиска файлов. Я хочу, чтобы сценарий завершился, как только будут выполнены условия для любого из вложенных операторов.

Но сценарий по-прежнему продолжает выполнять все оставшиеся операторы if-else.

Я тестировал выход 0 и возврат 0, но ни один из них не работает.

Вот сценарий:

#!/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

person H S Mak    schedule 14.09.2017    source источник


Ответы (1)


Я обнаружил, что лучший способ — использовать цикл while для повторения каждого поиска. В каждой итерации условие if-else будет проверять, найдены ли файлы, соответствующие шаблону поиска. Как только это условие истинно, оператор 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
person H S Mak    schedule 15.09.2017