Предпочтительно избегать использования & ldquo; exit & rdquo; в сценариях bash как можно больше?

Мне сказали, что php предпочитает избегать использования команды exit как можно больше.

То же самое верно для bash?

Например, это следуя

#!/bin/bash
if [ -z $1 ]; then
        echo You need to enter the directory you want to backup
else
        sourceFile=$1
        targetFile=/home/me/Desktop/myBackups/files_$(date +%Y_%m_%d_%s)
        tar cvf $targetFile $sourceFile
fi

Предпочтительнее этого?

#!/bin/bash
if [ -z $1 ]; then
        echo You need to enter the directory you want to backup
        exit
fi
        sourceFile=$1
        targetFile=/home/me/Desktop/myBackups/files_$(date +%Y_%m_%d_%s)
        tar cvf $targetFile $sourceFile
4
задан 5 December 2011 в 11:23

3 ответа

Цитирование «Код завершен»

Используйте [exit], когда он повышает читаемость. В определенных процедурах, как только вы знаете ответ, вы хотите немедленно выйти [exit] к вызывающей программе. Если процедура определена таким образом, что она не требует никакой дополнительной очистки после обнаружения ошибки, а не [выхода] немедленно означает, что вам нужно написать больше кода.

Таким образом, обычно один выход является предпочтительным (люди, смотрящие на ваш код, не должны найти правильный оператор выхода), однако с проверкой ошибок (особенно в начале программы / процедуры, имеющей несколько операторов выхода, более ясный.

Ваш пример пограничный, однако я бы сказал, что второй предпочтительнее, чтобы обслуживание вашей программы / скрипта могло оставить его в порядке.

Ваша программа в настоящее время (в psudocode )

if error condition 1
    // Show error message 1
else
    // Do stuff
fi

или

if error condition 1
    // Show error message 1
    // exit
fi

// Do stuff

Как только ваша программа выросла, вы поймете еще несколько способов, с помощью которых программа может выйти из строя.

if error condition 1
    // Show error message 1
else 
    if error condition 2
         // Show error message 2
    else
         if error condition 3
             // Show error message 3
         else
             // Do stuff
         fi
    fi
fi

или, может быть,

if error condition 1
    // Show error message 1
else if error condition 2
    // Show error message 2
else if error condition 3
    // Show error message 3
else
    // Do stuff
fi

против

if error condition 1
    // Show error message 1
    // exit
else if error condition 2
    // Show error message 2
    // exit
else if error condition 3
    // Show error message 3
    // exit
fi

// Do stuff

На мой взгляд, последний из них является самым ясным из того, что он может определить, что (например, 0 при успехе, 1 на ошибке 1, 2 на ошибке 2 и т. д.), и разница станет более выраженной.

6
ответ дан 25 May 2018 в 16:15

Я полагаю, что это зависит от сценария в какой-то степени от вашего кода и того, что вы пытаетесь выполнить, ловушек, обработки ошибок и т. д.

В общем, вы хотите либо указать, что выходите status

exit 1

или set -e

#!/bin/bash -e

Вы можете добавить управление ошибками различными способами

command 1 || echo "command 1 failed"

для записи функций в ловушки .

Есть несколько приятных (вводных) обсуждений со ссылками:

http://www.turnkeylinux.org/blog/shell-error-handling https: // stackoverflow. com / questions / 1378274 / in-a-bash-script-how-can-i-exit-all-script-if-a-some-condition-https://stackoverflow.com/questions/64786/error -handling-in-bash
2
ответ дан 25 May 2018 в 16:15

Мое предпочтение таково:

#!/bin/bash
if [[ -z "$1" ]]; then
        # Notice that I added quotes and redirection
        echo "You need to enter the directory you want to backup" 1>&2
        exit
fi
# Notice that I fixed the indentation
sourceFile="$1"
targetFile="/home/me/Desktop/myBackups/files_$(date +%Y_%m_%d_%s)"
tar cvf "$targetFile" "$sourceFile"

Я думаю, что выходите в тот момент, когда ясно, что программа не может продолжить или где она явно завершена, делает для самого чистого кода.

В несвязанной ноте будьте осторожны с кавычками строк в Bash. Они укусят вас рано или поздно. Хорошая привычка всегда окружать строки двойными кавычками (даже если это технически не нужно), если вы специально не хотите, чтобы не кавычки. Кроме того, если вы используете bash, [[ намного лучше, чем [.

1
ответ дан 25 May 2018 в 16:15

Другие вопросы по тегам:

Похожие вопросы: