Set有以下简单使用场景
1.set -e
执行时如果出现返回值为非0,则整个脚本会立刻退出。
2.set +e
执行时如果出现返回值为非0,脚本会继续执行,不会退出。
3.set -u
当访问未定义的变量时,会引发错误并停止脚本的执行
4.set -x
执行每一行 shell 脚本时,把执行的内容输出来。它可以让你看到当前执行的情况,里面涉及的变量也会被替换成实际的值。
5.set -euo pipefail
此命令可分解为以下三个命令的合集
(1)set -e:如上
(2)set -u:如上
(3)set -o pipefail:如果管道中的任何一个命令失败(exit code非零),则整个管道的exit code为非零。默认情况下,管道的退出码是最后一个命令的exit code。通过设置pipefail,可以确保在管道中任何一个命令失败时,整个管道被认为是失败的。可以类似于java中的抛RuntimeException异常。
案例说明,正常的脚本执行过程
[root@10 ~]# cat test.sh
#!/bin/bash
#set -xeuo pipefail
cat abc.txt
echo "hello"
[root@10 ~]#
[root@10 ~]#
[root@10 ~]# sh test.sh
cat: abc.txt: No such file or directory
hello
[root@10 ~]# echo $?
0
[root@10 ~]#
加上set后,脚本执行过程
[root@10 ~]# cat test.sh
#!/bin/bash
set -xeuo pipefail
cat abc.txt
echo "hello"
[root@10 ~]#
[root@10 ~]#
[root@10 ~]#
[root@10 ~]# sh test.sh
+ cat abc.txt
cat: abc.txt: No such file or directory
[root@10 ~]#
[root@10 ~]# echo $?
1
[root@10 ~]#
exit code以及执行到的最后的脚本都不同。