Остановить все индексы, если тест не прошел

Рассмотрим ситуацию:

файлы сценариев: main.sh , sub1.sh и sub2.sh

В main я вызываю sub1 и sub2 . Затем я запускаю main для всех файлов из папки, используя for :

 for file in samples/*.jpg; do bash ./main.sh $file; done 

и он работает очень хорошо.

Но в sub1 я sub1 некоторые значения, и я хотел бы остановить выполнение main для текущего $file если тест завершился неудачно, и начать снова main для следующего файла из цикла.

Например, если папка содержит jpg-файлы 01,...,09 а тест в sub1 не выполняется для файла 04 тогда остановите sub1 для 04 , пропустите sub2 для 04 , остановите остальную часть main для 04 и запустите main для 05 .

Тест:

 if (( $numcc % 3 == 0 )) then ... else ... fi 

  • Как преобразовать текст так, чтобы каждая выходная строка начиналась с названия блока?
  • Проверить программную установку докеров (sh-script)
  • Прочитайте n строк сразу в цикле, используя сценарий bash
  • Сортировка фотографий с использованием сценария оболочки
  • Как объединить два файла в один с столбцами для данных каждого файла?
  • Как путь к исполняемому набору, если скрипт находится в PATH
  • Сценарий оболочки для автоматического исключения и отключения приложения на основе системного времени
  • синтаксическая ошибка возле неожиданного токена `('
  • One Solution collect form web for “Остановить все индексы, если тест не прошел”

    main.sh sub1.sh три примера сценариев: main.sh , sub1.sh и sub2.sh Они вызываются, как упоминалось в сообщении, т. Е. for file in samples/*.jpg; do bash ./main.sh $file; done for file in samples/*.jpg; do bash ./main.sh $file; done

    Основная идея заключается в том, что sub1.sh создает временный файл, если тест терпит неудачу; sub2.sh проверяет наличие этого файла. Наконец, файл блокировки удаляется в main.sh каждый раз перед main.sh двух других скриптов. Обратите внимание, что это не рекомендуемый способ обработки временных файлов, а просто для иллюстрации использования.

    Чтобы смоделировать тест, я проверил, равномерное или случайное целое. Замените свои фактические условия испытаний там.

    Содержимое main.sh :

     #!/bin/bash export LOCK_FILE=sub1_failed.txt echo "$0 $1" [ -f "$LOCK_FILE" ] && rm "$LOCK_FILE" bash ./sub1.sh "$1" bash ./sub2.sh "$1" 

    Содержимое sub1.sh :

     #!/bin/bash echo "$0 $1" if (( $RANDOM % 2 == 0 )) then # Test failed echo "> $0 failed: Creating $LOCK_FILE ..." touch "$LOCK_FILE" else # Test successful : fi 

    Содержимое sub2.sh :

     #!/bin/bash echo "$0 $1" if [ -f "$LOCK_FILE" ] then echo 'Skipping sub2.sh' exit 1 else echo 'Executing sub2.sh as usual' fi echo 'sub2.sh done' echo '' 

    Пример вывода из одного из экземпляров выполнения показан ниже. Из-за характера $RANDOM выход будет отличаться при каждом запуске вышеуказанного кода.

     ./main.sh samples/01.jpg ./sub1.sh samples/01.jpg > ./sub1.sh failed: Creating sub1_failed.txt ... ./sub2.sh samples/01.jpg Skipping sub2.sh ./main.sh samples/02.jpg ./sub1.sh samples/02.jpg > ./sub1.sh failed: Creating sub1_failed.txt ... ./sub2.sh samples/02.jpg Skipping sub2.sh ./main.sh samples/03.jpg ./sub1.sh samples/03.jpg ./sub2.sh samples/03.jpg Executing sub2.sh as usual sub2.sh done ./main.sh samples/04.jpg ./sub1.sh samples/04.jpg > ./sub1.sh failed: Creating sub1_failed.txt ... ./sub2.sh samples/04.jpg Skipping sub2.sh ./main.sh samples/05.jpg ./sub1.sh samples/05.jpg ./sub2.sh samples/05.jpg Executing sub2.sh as usual sub2.sh done 
    Linux и Unix - лучшая ОС в мире.