Middle
Чӣ гуна хатогиҳои корбариро дар bash коркард мекунӣ?
sobes.tech AI
Ҷавоб аз AI
У bash карыстальніцкія памылкі ў асноўным апрацоўваюцца з выкарыстаннем:
- Кодаў выхаду каманд: Кожная каманда вяртае код завяршэння (exit status).
0звычайна азначае поспех, любое іншае значэнне - памылку. - Умоўных канструкцый:
if,elif,elseвыкарыстоўваюцца для праверкі кодаў выхаду. - Логічных аператараў:
&&(і),||(ці) дазваляюць выконваць каманды у залежнасці ад поспеху/няспеху папярэдніх. - Перанакіравання вываду:
>(stdout),2>(stderr),&>(stdout і stderr). - Ловушак (traps): дазваляюць выканаць каманду пры атрымання сігналу або завяршэнні скрыпта.
Прыклады:
#!/bin/bash
# Праверка кода выхаду
if ! command_that_might_fail; then
echo "Памылка выканання каманды!" >&2 # Перанакіраванне ў stderr
exit 1 # Завяршэнне скрыпта з кодам памылкі
fi
# Логічны аператар &&
command_successful && echo "Каманда выканана паспяхова" || echo "Каманда скончылася з памылкай"
# Ловушка для апрацоўкі SIGINT (Ctrl+C)
trap 'echo "Атрыманы сігнал перапынення. Выхад..."; exit 1' SIGINT
# Перанакіраванне памылак і вывад паведамлення
if command_with_errors 2> error.log; then
echo "Каманда выканана без памылак"
else
echo "Знойдзены памылкі. Падрабязнасці ў error.log"
fi
Для павышэння надзейнасці скрыптаў таксама выкарыстоўваюцца:
set -e: Скрыпт завяршаецца пры любой неўдачнай камандзе (акрамя праверак уifіwhile).set -u: Пераменныя павінны быць вызначаны перад выкарыстаннем.set -o pipefail: Код выхаду канвеера становіцца кодам выхаду апошняй каманды, якая завяршылася з памылкай (а не заўсёды апошняй каманды ў канвееры).
#!/bin/bash
set -euo pipefail
# Гэты скрыпт завяршыцца, калі "undefined_var" не ўстаноўлена
echo "$undefined_var"
# Гэты скрыпт завяршыцца, калі "failing_command" верне нулявы код выхаду
failing_command
Выкарыстанне функцый і аргументаў:
#!/bin/bash
# Функцыя з праверкай аргументаў
validate_args() {
if [ $# -ne 2 ]; then
echo "Выкарыстанне: $0 <аргумент1> <аргумент2>" >&2
exit 1
fi
}
validate_args "$@"