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 来处理。所以解决特定问题还是需要特定的工具,切换一门更通用的脚本语言,有时候更好。

 

posted on 2017-02-12 15:21  chenb  阅读(127)  评论(0编辑  收藏  举报

导航