Sobes.tech
Middle

Bash'da foydalanuvchi xatolarini qanday ishlaysiz?

sobes.tech AI

AIdan javob

bashda, foydalanuvchi xatolari asosan quyidagi usullar bilan boshqariladi:

  • Buyruqlarning chiqish kodlari: Har bir buyruq yakunlanish kodini (chiqish holatini) qaytaradi. 0 odatda muvaffaqiyatni bildiradi, boshqa har qanday qiymat xatoni.
  • Shartli tuzilmalar: if, elif, else chiqish kodlarini tekshirish uchun ishlatiladi.
  • Mantiqiy operatorlar: && (va), || (yoki) avvalgi buyruqlarning muvaffaqiyati yoki muvaffaqiyatsizligiga qarab buyruqlarni bajarishga imkon beradi.
  • Chiqishlarni yo'naltirish: > (stdout), 2> (stderr), &> (stdout va stderr).
  • Trofalar (traps): Signalni qabul qilganda yoki skript tugagach buyruqni bajarishga imkon beradi.

Misollar:

#!/bin/bash

# Chiqish kodini tekshirish
if ! command_that_might_fail; then
  echo "Buyruq bajarilishida xato!" >&2 # stderr ga yo'naltirish
  exit 1 # Skriptni xato kodi bilan yakunlash
fi

# Mantiqiy operator &&
command_successful && echo "Buyruq muvaffaqiyatli bajarildi" || echo "Buyruq xatolik bilan yakunlandi"

# SIGINT uchun trap
trap 'echo "Interaktiv signal qabul qilindi. Chiqish..."; exit 1' SIGINT

# Xatolarni yo'naltirish va xabar
if command_with_errors 2> error.log; then
  echo "Buyruq xatarsiz bajarildi"
else
  echo "Xatolar aniqlanadi. Tafsilotlar error.log da"
fi

Skriptlarning ishonchliligini oshirish uchun quyidagilar ham qo'llaniladi:

  • set -e: Har qanday buyruq muvaffaqiyatsiz bo'lsa, skript to'xtaydi ( if va while bundan mustasno).
  • set -u: O'zgaruvchilar ishlatishdan oldin aniqlangan bo'lishi kerak.
  • set -o pipefail: Pipeline ning chiqish kodi oxirgi muvaffaqiyatsiz bo'lgan buyruq kodi bo'ladi.
#!/bin/bash

set -euo pipefail

# Bu skript "undefined_var" o'rnatilmagan bo'lsa, to'xtaydi
echo "$undefined_var"

# Bu skript "failing_command" nol bo'lmagan kod bilan tugasa, to'xtaydi
failing_command

Funktsiyalar va argumentlardan foydalanish:

#!/bin/bash

# Argumentlarni tekshirish bilan funksiya
validate_args() {
  if [ $# -ne 2 ]; then
    echo "Foydalanish: $0 <argument1> <argument2>" >&2
    exit 1
  fi
}

validate_args "$@"