Linux里面set -e命令作用是,如果一个命令返回一个非0退出状态值(失败),就退出.
这个命令-e参数企业应用极少
set的“+” ,"-" 分别用于关闭或者打开某些特性;具体的特性有很多,这里介绍 -e 特性:
set -e 表示后续所有的bash 命令的返回code 如果不是0,那么脚本立即退出,后续的脚本将不会得到执行的机会;
set +e 这个是默认的状态,表示就算后续的命令如果返回值不是0,那么脚本依然向下执行;
所以 set -e其实就是从设置的位置起,给脚本的每一条命令加上了同一个退出条件;而set +e 则是取消这种设置;
看下面的例子:
[root@oldboy ~]# cat test.sh
#!/bin/bash
function lookupstr(){
grep "sles" /etc/os-release >/dev/null 2>&1
if [ "$?" -ne 0 ]then
echo -e "Can not find the 'sles' string in file.\n"
fi
}
echo "Below results based on: set +e"
set +e
lookupstr
echo "Below results based on: set -e"
set -e
lookupstr
[root@oldboy ~]# ./test.sh
Below results based on: set +e
Can not find the 'sles' string in file.
Below results based on: set -e
[root@oldboy ~]#
set -e option 可以帮助优化脚本
ex命令 ex 是一个行编辑器。如同对文件调用vi编辑器一样,也可以对文件调用ex行编辑器。 $ which ex /bin/ex 在RHELV4U2 中的路径 $ex practice practice 6 lines, 320 characters : 显示该文件的行数,多少个字符。停止在:冒号命令提示符。 :1p With a scre
set -e
set命令的-e参数,linux自带的说明如下:
"Exit immediately if a simple command exits with a non-zero status."
也就是说,在"set -e"之后出现的代码,一旦出现了返回值非零,整个脚本就会立即退出。有的人喜欢使用这个参数,是出于保证代码安全性的考虑。但有的时候,这种美好的初衷,也会导致严重的问题。
本来不加set什么事儿都没有(已测试结果无误),加上set -e后就出来问题了:
read_len计算结果为94
结果是:
结果是:
结论:如果设置set -e 则遇到 解析后值为零的变量会退出脚本(但tri_len值确是有的,为0),可以通过||符号来改变**,或者干脆不要加set -e了。
结果是:
参考: linux中的set命令: "set -e" 与 "set -o pipefail"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)