???????????飬???????????????д shell ??????Щ????????????????д??????????????????????????????????????????????°????????????????????????????????????м?????????????????
????1. ???bash
????shell ????????У?#!????????????
?????????????????????????????????????????????????/usr/bin/env bash???????/bin/bash??????/usr/bin/bash??????/bin/sh??????/usr/bin/env sh????????????“’??’??????д??”???
?????????????£?????????д???????????????д???????????????“???????”??????????????????????
?????????????? shell ???? bash ?????????? Linux ???а??????汾?????? sh ???? bash??
??????????? bash ?????? /usr/bin/bash ?????
???????????? /usr/bin/env bash ?? /bin/bash????????env???????м????env??$PATH??????bash????????????????????????? bash λ???/usr/bin/bash?????????????????????????
????2. set -e ?? set -x
????OK?????????????????????ж??????????????????д?????????
????????????????????д????????????????????????set -e?????set -x??
????set -x??????????? shell ??????????е?????????????????????????????е???????????漰?????????滻?????????
????set -e??????г???????????????????????е?“?????”???????????????????г??????????????????????????
???????set -e??????????????????????man bash???棬??????????λ????????????????????ж?????????????????? shell ????λ???????????
??????? pipeline ????β????????? error | ok
????????????????β????????? ok && error || other
???????????????β????????? error; ok
????λ???ж??????????? test??if?? while ????
??????????????????????????? debug ??????????????????????????????????б????д????о???????????????????????????д??????????????д???????ж???????????????????????????????????????????????????????????????????????????????????????? debug ?????????????????????????????????????????????
????3. ????shellcheck
?????????????????????????У????壩?????????????????ж??д???????????д???
???????????????????£???????????????Σ????????? shell ?????д??????shellcheck
????????????????д????? shell ???????Щ???????????????????????? shellcheck ?????????
????shellcheck ???????????????????????????? shell ?????д?????? bad code?????????N?????????棬???м??????????Щ bad code ???????????? shellcheck ?????????????Щ???????????????????????????????????????? shellcheck ????? shell ??д????????????????
??????ν“???????????”???????????Щ?±??????????????????????????????????????????????????????????£???????????????“???”????????????
??????????shellcheck ??????? haskell д????? haskell ???????????
????4. ???????
?????? shell ????У???????????????????????echo $xxx | awk/sed/grep/cut...????????????????????????????????????????????????
????????α????????bash ?????????????????????????????????????????????? read the f**k manaul! man bash ???????Parameter Expansion?????????????????ɡ??????д???????????£????????????????????? Bash????
????5. ???local
????????????д????????????????????????????п???????? bash ??????????? bash????????? local ???????????????????????????????——??? js ?? lua ???????????????????? bash ??????????????????????????????????????????????????????????????棬????????????????????????????????????????????????????????????£????????????????????????????????????ü??? local ??????
????6. trap ???
?????????д??????????????????е?????????? posix ???????“???”????????????????????????????Ρ????????????????shell ???????????trap sighandler INT?????????? SIGINT ????? sighandler ????????????????????????????
???????? trap ???????ó??????????????????trap ???????“????”??????????——?????????????????????????????????á?????????????trap func EXIT??trap func ERR??
????trap func EXIT????????????????ú???????????????????????????????????????????????????????????????????????????£?????????????????????????????????????β?????????????
????trap func ERR?????????г???????ú????????????????????????????ERROR?洢??????????????????????и???洢??????????????檔????????????????????????е????????????????Ч??????????????????????????????EXIT???????????????ERR?????????
????7. ???????
?????????????????????飬?????????????顣
??????????????????“???????”?????????д??????????????????????????????????У??м???????????д????????????????????????????????????????????СС?????????д???????????????????????????????????????????Щ????????Щ?????????????????????????????????????仯????Щ????????????????????????????????????????????????????????????????????????????????á?
???????????????????????????????д??????????Щ?????????????Щ????????????????????????????????????д?????????????з????????????????????????????????
????8. ?????
??????Щ?????? shell д?????ζ?????????????????????д????????????????????????
????????????????????????????????????????????????????棬???ò?????grep??sed??awk?????????????????????
????????м????????????????С????????BSD??GNU coreutils??bash?汾?????????????????塣
??????????????????????????μ?API??shell ??????????????????????????
??????????????????ú?????????????????? shell????????л??????????????????????????ruby/python/perl??????????д??? shell ??????????????????????????????????????????????漰???????????? shell ??????????????????????????????????????????????????????????????? ruby/python ?????????д?????