重點
- 第一行就用
#!/usr/bin/env bash。 - 檔案使用
.sh(或 .bash)副檔名。 - 在腳本開頭使用
set -o errexit。 - 也建議使用
set -o nounset。- 用
"${VARNAME-}" 取代 "$VARNAME"
- 使用
set -o pipefail。 - 使用
set -o xtrace,並檢查 $TRACE 環境變數。if [[ "${TRACE-0}" == "1" ]]; then set -o xtrace; fi- 使用者可以透過
TRACE=1 ./script.sh 啟用除錯模式,而不是 ./script.sh。
if / while 條件使用 [[ ]],而不是 [ ] 或 test。- 變數存取一律用雙引號包住。
- 在函式中使用
local 變數。 - 輸出錯誤訊息時請導向 stderr。
- 例如
echo 'Something unexpected happened' >&2。
- 能用長選項就用長選項(例如
--silent 取代 -s)。 - 適合的話,腳本開頭就切換到腳本所在目錄。
- 可用
cd "$(dirname "$0")",多數情況可用。
- 使用
shellcheck 並留意其警告。
範本
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
if [[ "${TRACE-0}" == "1" ]]; then
set -o xtrace
fi
if [[ "${1-}" =~ ^-*h(elp)?$ ]]; then
echo 'Usage: ./script.sh arg-one arg-two
This is an awesome bash script to make your life better.
'
exit
fi
cd "$(dirname "$0")"
main() {
echo do awesome stuff
}
main "$@"