Не уверен, что это возможно, но я пытаюсь вырваться из инструкции if
, которая находится в цикле while
. Однако я не хочу выходить из цикла while
. Я попытался использовать exit
и break
, но оба выхода из цикла while.Выйти из оператора if во время цикла
Проблема в том, что я не знаю, в какой папке находится файл, который я ищу, поэтому я хочу выйти из текущего оператора if
, когда я сопоставляю искомый файл, чтобы я мог перейти к следующий серийный номер.
У меня есть текстовый файл drives-fw-sn.txt
, который содержит список серийных номеров. Структура коды:
- Я прочитал в одном серийном номере на время от
drives-fw-sn.txt
используяwhile
петли - I поиск файла с именем
output_log
использованиемfind
- Я тогда напечатать первое вхождение серийного номера из найденного файла
- Далее я печатаю, что журнал был найден и хочу
Вот отрывок из моего кода (там более трех тестовых папок). Обратите внимание, что он все еще содержит команды exit
, которые выходят из цикла while
.
while read node; do
if find ./test1/*log* -maxdepth 2 -type f -name output_log -exec egrep -m 1 $node {} \; ; then
echo "Log SN $node available"
exit 1
fi
if find ./test2/*log* -maxdepth 2 -type f -name output_log -exec egrep -m 1 $node {} \; ; then
echo "Log SN $node available"
exit 1
fi
if find ./test3/*log* -maxdepth 2 -type f -name output_log -exec egrep -m 1 $node {} \; ; then
echo "Log SN $node available"
exit 1
fi
done < drives-fw-sn.txt
Вы пробовали использовать аргумент case в bash? –
@KaranShah Я думал об использовании оператора case, но я не думаю, что он был бы очень подходит для моего приложения. – stevo
Состояние выхода 'find' не связано с статусом выхода команды, выполняемой с помощью' -exec', или сколько файлов найдено 'find'. Статус выхода равен 0, если в работе 'find' нет реальной ошибки. – chepner