shell的建议
指定bash
shell脚本第一行, #! 应该是什么?
大多数情况 /usr/bin/env bash, /bin/bash, /usr/bin/bash, /bin/sh, /usr/bin/env sh 是等价的,但是少数情况还是有坑。如默认的shell 可能不是 bash,如某个发行法本,默认sh不是bash。
所以推荐使用 /bin/bash
set -e 和 set -x
在具体的代码逻辑之前,先插入 一行 set -e 和 一行 set -x
set -x 会在执行每一行 shell 脚本的时候,将执行的内容输出来。所有涉及的变量都会被替换成实际的值。
set -e 会在执行出错时结束程序。(但是不是所有出错的时候都会结束程序)。
带上shellcheck
shellcheck 可以查错
注意local
写函数的时候,如果 不加 local 限定词,那么变量默认就是全局的,这和js差不多。
在顶级作用域中,是否全局没有多大影响,但是在函数中,一个全局变量就有可能污染其他作用域。所以在函数中声明的变量,一定要加上 local 限定词
复杂的逻辑还是避开shell
shell 写脚本往往就是难以移植,难以统一进行错误处理,难以利索的处理数据。所以需要配合很多外部的命令,如 grep,sed,awk 来处理。所以解决特定问题还是需要特定的工具,切换一门更通用的脚本语言,有时候更好。