Sobes.tech
Middle

Kā jūs apstrādājat lietotāja kļūdas bash?

sobes.tech AI

Atbilde no AI

bash lietošanas kļūdu apstrāde galvenokārt tiek veikta, izmantojot:

  • Iziešanas kodus: Katra komanda atgriež pabeigšanas kodu (exit status). 0 parasti nozīmē panākumus, bet citi — kļūdu:
  • Nosacījumu konstrukcijas: if, elif, else tiek izmantotas iziešanas kodu pārbaudei:
  • Loģiskie operatori: && (un), || (vai) ļauj izpildīt komandas atkarībā no iepriekšējās sekmes vai neveiksmes:
  • Iziešanas novirzes: > (stdout), 2> (stderr), &> (stdout un stderr):
  • Lūkas (traps): ļauj izpildīt komandu, saņemot signālu vai pabeidzot skriptu:

Piemēri:

#!/bin/bash

# Iziešanas koda pārbaude
if ! command_that_might_fail; then
  echo "Kļūda komandas izpildē!" >&2 # novirze uz stderr
  exit 1 # skripta pabeigšana ar kļūdas kodu
fi

# Loģiskais operators &&
command_successful && echo "Komanda veiksmīgi izpildīta" || echo "Komanda beidzās ar kļūdu"

# SIGINT (Ctrl+C) lūka
trap 'echo "Signāls saņemts. Iziet..."; exit 1' SIGINT

# Kļūdu novirzes un ziņojuma izvadīšana
if command_with_errors 2> error.log; then
  echo "Komanda izpildīta bez kļūdām"
else
  echo "Atklātas kļūdas. Detalizācija error.log"
fi

Lai palielinātu skriptu uzticamību, tiek izmantoti arī:

  • set -e: Skripts pārtrauks pēc jebkuras neveiksmīgas komandas (izņemot if un while pārbaudes).
  • set -u: Mainīgie ir jādefinē iepriekš.
  • set -o pipefail: Vada iziešanas kods kļūdas gadījumā ir pēdējās komandas kods, kas beidzās ar kļūdu:
#!/bin/bash

set -euo pipefail

# Šis skripts pārtrauks, ja "undefined_var" nav definēts
echo "$undefined_var"

# Šis skripts pārtrauks, ja "failing_command" atgriezīs nullekoda
failing_command

Funkciju un argumentu izmantošana:

#!/bin/bash

# Funkcija ar argumentu pārbaudi
validate_args() {
  if [ $# -ne 2 ]; then
    echo "Lietošanas veids: $0 <arguments1> <arguments2>" >&2
    exit 1
  fi
}

validate_args "$@"