Sobes.tech
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 "$@"