本文讲述的是我多年来在编写shell脚本时所使用的一些最佳实践。纯个人经验性分享。
注意事项使用bash。使用zsh或fish或其他任何工具,将使他人难以理解/合作。在所有shell中,bash在可移植性和DX之间取得了很好的平衡。只需将第一行设置为#!/usr/bin/env bash,即使您没有给脚本文件可执行权限一样可以执行。为文件使用.sh(或.bash)扩展名。不为脚本提供扩展可能有点奇怪,但除非你的用例明确地依赖于扩展,否则您可能只是在尝试做一些聪明的事情,但是聪明的东西很难理解。在脚本开始时使用set -o 。当一个命令失败时,bash将退出,而不是继续执行脚本的其余部分。尽量用set -o 。你可能有一个很好的借口不这样做,但我的观点是,最好总是设置它。这将使脚本在访问未设置的变量时失败。避免了可怕的意外后果,比如变量名的错别字。当你想访问一个可能已设置或未设置的变量时,使用”${-}”而不是”$”,这样就没问题了。使用set -o 。同样,你可能有很好的理由不这样做,但我建议始终设置它。这将确保管道命令被视为失败,即使管道中的一个命令失败了。使用set -o ,检查$TRACE环境变量。
if [[“${TRACE-0}” == “1”]];then -o ;fi。这对调试脚本有很大帮助。人们现在可以启用调试模式,通过运行你的脚本作为TRACE=1 ./.sh而不是./.sh。在if / while语句中使用[[]]作为条件,而不是[]或test。[[]]是bash内置关键字,比[]或test更强大。总是用双引号引用变量访问。一个可以不这样做的地方是在条件[[]]的左侧。但即便如此,我还是建议你引用。当您需要不加引号的行为时,使用bash数组可能会更好。在函数中使用局部变量。接受用户寻求帮助的多种方式,并以同样的方式给予回应。检查第一个参数是否为-h或–help或help或只是h甚至-help,在所有这些情况下,打印帮助文本并退出。写好的脚本过一段时间你就会忘记,使用help信息对你的未来会有帮助。当打印错误消息时,请重定向到。为此使用echo ' ' >&2。尽可能使用长选项(比如–而不是-s)。它们用于显式地记录您的命令。不过请注意,在macOS等某些系统上发布的命令并不总是具有长选项。如果合适,脚本路径尽可能在脚本开始的位置。可以避免因为工作路径差异导致的问题。使用cd “$( “$0”)”,这在大多数情况下都有效。使用。注意它的警告。脚本模板
#!/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 "$@"
结论
我试着在我的脚本中遵循这些规则,它们至少让我的工作变得更好。不幸的是,在遵守我自己的规则方面,我仍然没有始终如一。所以,也许这样写下来也能帮助我在这方面有所提高。
你觉得我还有什么要补充的吗?
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666