Pulogalamu ya ProHoster > Blog > Ulamuliro > Njira Zabwino Kwambiri za Bash Scripting: Chitsogozo Chachangu cha Ma Bash Scripts Odalirika ndi Magwiridwe
Njira Zabwino Kwambiri za Bash Scripting: Chitsogozo Chachangu cha Ma Bash Scripts Odalirika ndi Magwiridwe
function handle_exit() {
// Add cleanup code here
// for eg. rm -f "/tmp/${lock_file}.lock"
// exit with an appropriate status code
}
// trap <HANDLER_FXN> <LIST OF SIGNALS TO TRAP>
trap handle_exit 0 SIGHUP SIGINT SIGQUIT SIGABRT SIGTERM
Ndikofunikira kugwiritsa ntchito zida zomangidwira kuti zithandizire zochitika ngati izi setmonga set -o errexit, set -o pipefail kapena set -o nounset kumayambiriro kwa script. Ntchito izi zimawonetsetsa kuti script yanu idzatuluka ikangokumana ndi code yotuluka yopanda ziro, kugwiritsa ntchito mitundu yosadziwika, malamulo olakwika omwe amadutsa papaipi, ndi zina zotero:
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
function print_var() {
echo "${var_value}"
}
print_var
$ ./sample.sh
./sample.sh: line 8: var_value: unbound variable
Taonani: ntchito zomangidwa monga set -o errexit, idzatuluka pa script pakakhala "yaiwisi" yobwereza code (kupatula ziro). Chifukwa chake ndikwabwino kuyambitsa zowongolera zolakwika, mwachitsanzo:
#!/bin/bash
error_exit() {
line=$1
shift 1
echo "ERROR: non zero return code from line: $line -- $@"
exit 1
}
a=0
let a++ || error_exit "$LINENO" "let operation returned non 0 code"
echo "you will never see me"
# run it, now we have useful debugging output
$ bash foo.sh
ERROR: non zero return code from line: 9 -- let operation returned non 0 code
Kulemba zolembera motere kumakukakamizani kuti mukhale osamala kwambiri ndi machitidwe a malamulo onse omwe ali mu script ndi kuyembekezera kutheka kwa cholakwika chisanakuchititseni modzidzimutsa.
ShellCheck kuti muwone zolakwika pakukula
Ndikoyenera kuphatikiza chinthu chonga ShellCheck mukukula kwanu ndikuyesa mapaipi kuti muwone nambala yanu ya bash motsutsana ndi machitidwe abwino.
Ndimagwiritsa ntchito m'malo omwe ndikutukuka kwanuko kuti ndipeze malipoti pamawu, ma semantics, ndi zolakwika zina mu code zomwe mwina ndidaziphonya popanga. Ichi ndi chida chowunikira chokhazikika pamawu anu a bash ndipo ndikupangira kugwiritsa ntchito.
Kugwiritsa ntchito ma code anu otuluka
Ma code obwelera mu POSIX sangokhala ziro kapena chimodzi, koma ziro kapena mtengo wosakhala ziro. Gwiritsani ntchito izi kuti mubwezere ma code olakwika (pakati pa 201-254) pazolakwa zosiyanasiyana.
Izi zitha kugwiritsidwa ntchito ndi zolemba zina zomwe zimakutira zanu kuti mumvetsetse mtundu wa cholakwika chomwe chidachitika ndikuchita moyenerera:
#!/usr/bin/env bash
SUCCESS=0
FILE_NOT_FOUND=240
DOWNLOAD_FAILED=241
function read_file() {
if ${file_not_found}; then
return ${FILE_NOT_FOUND}
fi
}