Sobes.tech
Middle

Kako rukujete korisničkim greškama u bash-u?

sobes.tech АИ

Одговор од АИ

U bash-u, korisničke greške se uglavnom obrađuju pomoću:

  • Kodova izlaza komandi: Svaka komanda vraća kod završetka (status izlaza). 0 obično označava uspeh, bilo koja druga vrednost grešku.
  • Uslovnih konstrukcija: if, elif, else koriste se za proveru kodova izlaza.
  • Logičkih operatora: && (i), || (ili) omogućavaju izvršavanje komandi u zavisnosti od uspeha/neuspeha prethodnih.
  • Preusmeravanja izlaza: > (stdout), 2> (stderr), &> (stdout i stderr).
  • Trapova: Omogućavaju izvršenje komande pri primanju signala ili završetku skripte.

Primeri:

#!/bin/bash

# Provera koda izlaza
if ! command_that_might_fail; then
  echo "Greška pri izvršenju komande!" >&2 # Preusmeravanje u stderr
  exit 1 # Završetak skripte sa greškom
fi

# Logički operator &&
command_successful && echo "Komanda uspešno izvršena" || echo "Komanda je završila greškom"

# Trap za SIGINT (Ctrl+C)
trap 'echo "Primljen signal prekida. Izlaz..."; exit 1' SIGINT

# Preusmeravanje grešaka i poruka
if command_with_errors 2> error.log; then
  echo "Komanda je izvršena bez grešaka"
else
  echo "Otkriveni su greške. Detalji u error.log"
fi

Za povećanje pouzdanosti skripti, takođe se koriste:

  • set -e: Skripta se zaustavlja ako bilo koja komanda ne uspe (osim u if i while).
  • set -u: Promenljive moraju biti definisane pre upotrebe.
  • set -o pipefail: Kod izlaza cejne ce biti kod poslednje komande koja je neuspešna.
#!/bin/bash

set -euo pipefail

# Ovaj skript će se završiti ako "undefined_var" nije definisana
echo "$undefined_var"

# Ovaj skript će se završiti ako "failing_command" vrati nenulni kod
failing_command

Korišćenje funkcija i argumenata:

#!/bin/bash

# Funkcija sa proverom argumenata
validate_args() {
  if [ $# -ne 2 ]; then
    echo "Upotreba: $0 <argument1> <argument2>" >&2
    exit 1
  fi
}

validate_args "$@"