Sobes.tech
Middle

Bash'ta kullanıcı hatalarını nasıl işliyorsun?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bashda, istifadəçi səhvləri əsasən aşağıdakı üsullarla idarə olunur:

  • Əmrlərin çıxış kodları: Hər bir əmr tamamlanma kodu (çıxış statusu) qaytarır. 0 adətən uğuru göstərir, digər bütün dəyərlər isə səhvi.
  • Şərti quruluşlar: if, elif, else çıxış kodlarını yoxlamaq üçün istifadə olunur.
  • Məntiqi operatorlar: && (və), || (və ya) əvvəlki əmrlərin uğuruna və ya uğursuzluğuna görə əmrləri icra etməyə imkan verir.
  • Çıxış yönləndirmələri: > (stdout), 2> (stderr), &> (stdout və stderr).
  • Təhlükə (traps): Siqnalları qəbul etdikdə və ya skript bitdikdə əmri yerinə yetirməyə imkan verir.

Nümunələr:

#!/bin/bash

# Çıxış kodunun yoxlanması
if ! command_that_might_fail; then
  echo "Əmrin icrasında xəta!" >&2 # stderr-ə yönləndirmə
  exit 1 # Skripti səhv kodu ilə bitirmək
fi

# Məntiqi operator &&
command_successful && echo "Əməliyyat uğurla yerinə yetirildi" || echo "Əməliyyat səhvlə tamamlandı"

# SIGINT üçün trap
trap 'echo "İnterrupt siqnalı alındı. Çıxış..."; exit 1' SIGINT

# Xətaların yönləndirilməsi və mesaj
if command_with_errors 2> error.log; then
  echo "Əməliyyat xətasız yerinə yetirildi"
else
  echo "Xətalar aşkar edildi. Ətraflı error.log-də"
fi

Skriptlərin etibarlılığını artırmaq üçün həmçinin istifadə olunur:

  • set -e: Hər hansı bir əmrin uğursuz olması skripti dayandırır ( ifwhile istisna olmaqla).
  • set -u: Dəyişənlər istifadə edilmədən əvvəl təyin olunmalıdır.
  • set -o pipefail: Boru xəttinin çıxış kodu ən son uğursuz əmrin kodu olur.
#!/bin/bash

set -euo pipefail

# Bu skript "undefined_var" təyin olunmayıbsa, dayandırılır
echo "$undefined_var"

# Bu skript "failing_command" sıfır olmayan çıxış kodu verərsə, dayandırılır
failing_command

Funksiyaların və arqumentlərin istifadəsi:

#!/bin/bash

# Arqument yoxlaması ilə funksiya
validate_args() {
  if [ $# -ne 2 ]; then
    echo "İstifadə: $0 <argument1> <argument2>" >&2
    exit 1
  fi
}

validate_args "$@"