Middle
Ako spracovávaš chybové hlásenia používateľa v bash?
sobes.tech AI
Odpoveď od AI
V bash-u, korisničke greške se uglavnom obrađuju помоћу:
- Кодова за излаз командa: Свкака команда враћа код завршетка (статус излаза).
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: Код излаза pipeline-а ће бити код последње командe која је неуспешна.
#!/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 "$@"