Middle
Ինչպե՞ս եք մշակում օգտվողի սխալները bash-ում։
sobes.tech AI
Պատասխան AI-ից
bash- ում օգտագործվող սխալների մշակումը հիմնականում կատարվում է հետևյալ կերպ.
- Ելքի կոդեր: Յուրաքանչյուր հրամանը վերադարձնում է ավարտման կոդ (exit status):
0սովորաբար նշանակում է հաջողություն, ցանկացած այլ արժեք՝ սխալ: - Համակարգային կառուցվածքներ:
if,elif,elseօգտագործվում են ելքի կոդերի ստուգման համար: - Լոգիկական օպերատորներ:
&&(եւ),||(կամ) թույլ են տալիս կատարել հրամաններ՝ կախված նախորդների հաջողությունից կամ ձախողումից: - Ելքի ուղղումներ:
>(stdout),2>(stderr),&>(stdout և stderr): - Հայտնաբերումներ (traps): թույլ են տալիս կատարել հրաման՝ ստանալով նշան կամ ավարտելով սցենարը:
Նմուշներ:
#!/bin/bash
# Ելքի կոդի ստուգում
if ! command_that_might_fail; then
echo "Հայտնաբերվել է սխալ!" >&2 # ուղղում stderr-ին
exit 1 # սցենարի ավարտում սխալի կոդով
fi
# Լոգիկական օպերատոր &&
command_successful && echo "Հրամանը հաջողությամբ կատարվեց" || echo "Հրամանը ավարտվեց սխալով"
# Սխալի բռնիչ (trap) SIGINT (Ctrl+C)
trap 'echo "Սիգնալը ստացվեց. Ելք..."; exit 1' SIGINT
# Սխալների ուղղում և հաղորդագրության արտածում
if command_with_errors 2> error.log; then
echo "Հրամանը կատարվեց առանց սխալների"
else
echo "Հայտնաբերվել են սխալներ: Նշումներ՝ error.log"
fi
Սցենարների հուսալիությունը բարձրացնելու համար օգտագործվում են նաև.
set -e: Սցենարը ավարտվում է ցանկացած անհաջող հրամանից (բացառությամբifևwhileստուգումների):set -u: Պերամիտրները պետք է նախապես սահմանված լինեն:set -o pipefail: Կոնվեյերի ելքի կոդը դառնում է վերջին սխալով ավարտված հրամանի ելքի կոդը:
#!/bin/bash
set -euo pipefail
# Այս սցենարը կավարտվի, եթե "undefined_var" չլինի սահմանված
echo "$undefined_var"
# Այս սցենարը կավարտվի, եթե "failing_command" վերադարձնի ոչ զրո ելքի կոդ
failing_command
Ֆունկցիաների և արգումենտների օգտագործում:
#!/bin/bash
# Ֆունկցիա՝ արգումենտների ստուգմամբ
validate_args() {
if [ $# -ne 2 ]; then
echo "Օգտագործում՝ $0 <արգումենտ1> <արգումենտ2>" >&2
exit 1
fi
}
validate_args "$@"