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
trap igoko rakavakirwa-mukati rairo rinokubatsira kunyoresa kuchenesa basa rinodaidzwa kana paine masaini. Nekudaro, kutarisirwa kwakakosha kunofanirwa kutorwa nevanobata senge SIGINT, izvo zvinoita kuti script irambe.
Mukuwedzera, muzviitiko zvakawanda iwe unofanirwa kubata chete EXIT, asi pfungwa ndeyokuti unogona kunyatsogadzirisa maitiro echinyorwa chechiratidzo chega chega.
Zvakakosha kushandisa mabasa akavakirwa-mukati kubata mamiriro akadai setse set -o errexit, set -o pipefail kana set -o nounset pakutanga kwechinyorwa. Aya mabasa anovimbisa kuti script yako ichabuda nekukurumidza kana ichinge yasangana chero isiri-zero yekubuda kodhi, kushandiswa kwezvakasiyana zvakasiyana, mirairo isingaite yakapfuudzwa papombi, zvichingodaro:
#!/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
Cherechedza: akavakirwa-mukati mabasa akadai set -o errexit, ichabuda pane script kana paine "raw" yekudzoka kodhi (kunze kwe zero). Saka zviri nani kuunza tsika yekukanganisa kubata, semuenzaniso:
#!/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
Kunyora zvinyorwa nenzira iyi zvinokumanikidza kuti ungwarire maitiro emirairo yese iri mugwaro uye kutarisira mukana wekukanganisa kusati kwakutora iwe kushamisika.
Ini ndinoishandisa munzvimbo dzangu dzekusimudzira nharaunda kuti ndiwane mishumo pane syntax, semantics, uye zvimwe zvikanganiso mukodhi yandinogona kunge ndakapotsa ndichigadzira. Ichi chishandiso chekuongorora static kune ako bash script uye ini ndinokurudzira zvikuru kuishandisa.
Uchishandisa yako yekubuda macode
Dzosera macode muPOSIX haingori zero kana imwe chete, asi zero kana isiri-zero kukosha. Shandisa aya maficha kudzorera tsika yekukanganisa macode (pakati pe201-254) kune akasiyana zvikanganiso.
#!/usr/bin/env bash
function __msg_error() {
[[ "${ERROR}" == "1" ]] && echo -e "[ERROR]: $*"
}
function __msg_debug() {
[[ "${DEBUG}" == "1" ]] && echo -e "[DEBUG]: $*"
}
function __msg_info() {
[[ "${INFO}" == "1" ]] && echo -e "[INFO]: $*"
}
__msg_error "File could not be found. Cannot proceed"
__msg_debug "Starting script execution with 276MB of available RAM"
Ini kazhinji ndinoedza kuve neimwe mhando yemaitiro mune yangu zvinyorwa __init, uko misiyano yelogger yakadaro uye mamwe masisitimu akasiyana anotangwa kana kusetwa kune default kukosha. Izvi zvinosiyana zvinogona zvakare kusetwa kubva kune yekuraira mutsara sarudzo panguva yekukumbira script.
Somuenzaniso, chimwe chinhu chakadai:
$ ./run-script.sh --debug
Kana iyo script yaitwa, inova nechokwadi chekuti masisitimu-yakawanda marongero akaiswa kune yakasarudzika kukosha kana ichidikanwa, kana kuti inotangwa kune chimwe chinhu chakakodzera kana zvichidikanwa.