В BASH можно использовать return
встроенный:
return [n]
вызывает функцию выхода со значением возврата, заданным n. Если n опущена, статус возврата - это статус последней команды, выполненной в функциональное тело. Если используется вне функции, но во время выполнения скрипт по команде . (источник), он заставляет оболочку остановиться. выполняя этот скрипт и возвращая либо n, либо статус выхода последнего команда, выполняемая внутри скрипта как статус выхода из скрипта.. Если используется вне функции, а не во время выполнения скрипта по .., возвращаемое состояние будет ложным. Любая команда, связанная с ловушкой RETURN выполняется до возобновления выполнения после функции или скрипта.
Для других оболочек он, конечно, может работать по-другому.
Если вы можете переписать основной скрипт в виде цикла, вы можете использовать оператор break
, основанный на результатах команды цикла.
Проверяйте результат обработки и продолжайте только тогда, когда ничего не вышло из строя.
module_1
if [ $? -ne 0 ]; then
display_error_function
else
module_2
if [ $? -ne 0 ]; then
display_error_function
else
echo OK
fi
fi
Когда у вас много модулей, рассмотрите дополнительную оболочку.
.
EDIT: С помощью дополнительной переменной вы можете предотвратить глубокую вложенность (просто повторите if-block).
ERRORSFOUND=0
...
if [[ ${ERRORSFOUND} -eq 0 ]]; then
module_x
if [[ $? -ne 0 ]]; then
ERRORSFOUND=1
fi
fi