Sobes.tech
Middle

Hogyan kezeled a felhasználói hibákat bash-ben?

sobes.tech MI

Válasz az MI-től

A bash-ben a felhasználói hibák főként a következő módon kezelhetők:

  • Parancsok kilépési kódjai: Minden parancs visszaad egy befejezési kódot (kilépési státuszt). A 0 általában sikeres, minden más érték hibát jelez.
  • Feltételes szerkezetek: if, elif, else használhatók a kilépési kódok ellenőrzésére.
  • Logikai operátorok: && (és), || (vagy) lehetővé teszik parancsok végrehajtását a korábbi sikeressége vagy sikertelensége alapján.
  • Kimenet átirányítása: > (stdout), 2> (stderr), &> (stdout és stderr).
  • Csapdák (traps): Lehetővé teszik parancs végrehajtását egy jelzés fogadásakor vagy a script befejezésekor.

Példák:

#!/bin/bash

# Kilépési kód ellenőrzése
if ! command_that_might_fail; then
  echo "Hiba a parancs végrehajtásában!" >&2 # Átirányítás stderr-re
  exit 1 # A script befejezése hibakóddal
fi

# Logikai operátor &&
command_successful && echo "A parancs sikeresen végrehajtódott" || echo "A parancs hibával végződött"

# Trap a SIGINT (Ctrl+C) kezelésére
trap 'echo "Megkapta a megszakítás jelét. Kilépés..."; exit 1' SIGINT

# Hibák átirányítása és üzenet
if command_with_errors 2> error.log; then
  echo "A parancs hibamentesen végrehajtódott"
else
  echo "Hibák észlelve. Részletek az error.log-ban"
fi

A script megbízhatóságának növelése érdekében szintén használják:

  • set -e: A script leáll, ha bármelyik parancs sikertelen (if és while kivételével).
  • set -u: A változók használata előtt definiálni kell őket.
  • set -o pipefail: A pipeline utolsó sikertelen parancsának kódja lesz a pipeline kódja.
#!/bin/bash

set -euo pipefail

# Ez a script leáll, ha az "undefined_var" nincs beállítva
echo "$undefined_var"

# Ez a script leáll, ha a "failing_command" nem null kódot ad vissza
failing_command

Függvények és argumentumok használata:

#!/bin/bash

# Függvény argumentum ellenőrzéssel
validate_args() {
  if [ $# -ne 2 ]; then
    echo "Használat: $0 <argumentum1> <argumentum2>" >&2
    exit 1
  fi
}

validate_args "$@"