linux shell set 命令教程
set命令用来修改 Shell 环境的运行参数,也就是可以定制环境。一共有十几个参数可以定制,官方手册有完整清单。
官方:https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
工作常用:
set -o errexit
set +o nounset
set -o pipefail
配置脚本中报错即刻退出
set -e从根本上解决了这个问题,它使得脚本只要发生错误,就终止执行。
set +e表示关闭-e选项,set -e表示重新打开-e选项。
-e还有另一种写法-o errexit
set -o errexit
配置遇到不存在的变量就会报错,并停止执行
#!/usr/bin/env bash
echo $a
echo bar
执行结果
$ bash script.sh
bar
可以看到,echo $a
输出了一个空行,Bash 忽略了不存在的$a,然后继续执行echo bar
。大多数情况下,这不是开发者想要的行为,遇到变量不存在,脚本应该报错,而不是一声不响地往下执行。
可以看到shell的行为是:执行脚本的时候,如果遇到不存在的变量,Bash 默认忽略它。
set -u就用来改变这种行为。脚本在头部加上它,遇到不存在的变量就会报错,并停止执行。
-u还有另一种写法-o nounset,两者是等价的。
et +o nounset
配置只要一个子命令失败,整个管道命令就失败,脚本终止执行
所谓管道命令,就是多个子命令通过管道运算符(|)组合成为一个大的命令。Bash 会把最后一个子命令的返回值,作为整个命令的返回值。也就是说,只要最后一个子命令不失败,管道命令总是会执行成功,因此它后面命令依然会执行,set -e就失效了。
这是set -e 失效的一个特殊情况。
set -o pipefail用来解决这种情况,只要一个子命令失败,整个管道命令就失败,脚本就会终止执行。
set -o pipefail
set -x shell脚本打印执行的命令到屏幕
在liunx脚本中可用set -x就可有详细的日志输出。
shell脚本中:
set -x #启动"-x"选项
set +x #关闭"-x"选项
我们也可以在启动脚本时加该参数
sh -x run.dev
-x选项可以⽤来跟踪脚本的执⾏,使shell在执⾏脚本的过程中
把它实际执⾏的每⼀个命令⾏显⽰出来,并且在⾏⾸显⽰⼀个"+",
"+"后⾯显⽰的是经过了变量替换后的命令⾏内容,有助于分析
实际执⾏的命令