语法检查不严格带来的问题

shell语法检查并不严格,带来的两个大问题

  • 变量不存在时,能够正常解释(解释为空)
  • 前一个命令出错时,后面的命令会正常运行

    解决方案

    set -Eeuxo pipefail

    脚本开始前,设置bash的运行环境参数,如上。

    解释

    set -u: 遇到不存在的变量报错并停止脚本运行
    set -x: 显示输出结果的命令
    set -e: 脚本中命令出错,停止运行
    set -o pipefail: 补充set -e命令,不适用于管道符的情况
    set -E: 一旦设置了-e参数,会导致函数内的错误不会被trap命令捕获 ,-E参数可以纠正这个行为,使得函数也能继承trap命令

异常退出处理方式

trap [动作] [信号1] [信号2] …

动作可以是命令或者函数
常用信号 EXIT,编号0
不管什么情况,只要退出脚本就会产生

注意使用mktemp创建安全的临时文件或目录

mktemp
-p: 指定临时文件所在的目录
-d:创建一个临时目录
-t:可以指定临时文件的文件名模板,模板的末尾必须至少包含三个连续的X字符,表示随机字符,建议至少使用六个X