Мне сказали, что 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
Цитирование «Код завершен»
Используйте [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 и т. д.), и разница станет более выраженной.
Я полагаю, что это зависит от сценария в какой-то степени от вашего кода и того, что вы пытаетесь выполнить, ловушек, обработки ошибок и т. д.
В общем, вы хотите либо указать, что выходите 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Мое предпочтение таково:
#!/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, [[ намного лучше, чем [.