Middle
Kaip tvarkote naudotojo klaidas bash?
sobes.tech AI
Atsakymas iš AI
bash'e vartotojų klaidų apdorojimas daugiausia vyksta naudojant:
- Išeigos kodus: Kiekviena komanda grąžina užbaigimo kodą (exit status).
0dažniausiai reiškia sėkmę, bet kiti reikšmės — klaidą: - Sąlygines konstrukcijas:
if,elif,elsenaudojamos išeigos kodų patikrinimui: - Loginiai operatoriai:
&&(ir),||(ar) leidžia vykdyti komandas priklausomai nuo ankstesnio sėkmės ar nesėkmės: - Išeigos nukreipimai:
>(stdout),2>(stderr),&>(stdout ir stderr): - Gaudykles (traps): leidžia vykdyti komandą gaunant signalą arba užbaigiant scenarijų:
Pavyzdžiai:
#!/bin/bash
# Išeigos kodo patikrinimas
if ! command_that_might_fail; then
echo "Klaida vykdant komandą!" >&2 # nukreipimas į stderr
exit 1 # scenarijaus užbaigimas su klaidos kodu
fi
# Loginis operatorius &&
command_successful && echo "Komanda sėkmingai įvykdyta" || echo "Komanda baigėsi klaida"
# SIGINT (Ctrl+C) gaudyklė
trap 'echo "Gautas signalas. Išeinama..."; exit 1' SIGINT
# Klaidos ir išvesties nukreipimas
if command_with_errors 2> error.log; then
echo "Komanda įvykdyta be klaidų"
else
echo "Rasta klaidų. Daugiau informacijos error.log"
fi
Skriptų patikimumo didinimui taip pat naudojami:
set -e: Skriptas nutraukiamas po bet kurios nesėkmingos komandos (išskyrusifirwhilepatikrinimus).set -u: Kintamieji turi būti iš anksto apibrėžti.set -o pipefail: Vamzdžio išeigos kodas tampa paskutinės sėkmingai nesėkmingos komandos kodu:
#!/bin/bash
set -euo pipefail
# Šis scenarijus nutrauks, jei "undefined_var" nebus nustatyta
echo "$undefined_var"
# Šis scenarijus nutrauks, jei "failing_command" grąžins nulinį kodą
failing_command
Funkcijų ir argumentų naudojimas:
#!/bin/bash
# Funkcija su argumentų patikrinimu
validate_args() {
if [ $# -ne 2 ]; then
echo "Naudojimas: $0 <argumentas1> <argumentas2>" >&2
exit 1
fi
}
validate_args "$@"