博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell 脚本中set -e选项作用范围
阅读量:3732 次
发布时间:2019-05-22

本文共 1316 字,大约阅读时间需要 4 分钟。

        编写shell脚本没多久,对于其许多命令的具体用法还不太熟悉。最近刚好有需求,就尝试用脚本去实现。其中就有用到set -e选项。

        在用这个命令之前,也查过其功能,描述比较简单:就是当命令以非零状态退出时,则退出shell。主要作用是,当脚本执行出现意料之外的情况时,立即退出,避免错误被忽略,导致最终结果不正确。这里主要讨论的是set -e 选项的作用范围,创建如下测试文件:

zhenglei@SzExdroid14:~/study/scripts$ cat run.sh

#!/bin/bash
set -e
 
test_dir/set.sh
zhenglei@SzExdroid14:~/study/scripts$ cat test_dir/set.sh
#!/bin/bash
set -e
 
function return1()
{
        return 1
}
function return0()
{
        return 0
}
function returnf()
{
        return $1
}
 
echo "run start"
return1
if [ $? -ne 0 ];then
        echo "cmd error"
fi
echo "run end !"

单独执行test_dir/set.sh时打印如下:

zhenglei@SzExdroid14:~/study/scripts$ ./test_dir/set.sh

run start
即return1语句返回非零,立即退出执行。说明set -e 选项有效。接着将test_dir/set.sh中的set -e 屏蔽掉再执行run.sh时:

zhenglei@SzExdroid14:~/study/scripts$ ./run.sh

run start
cmd error
run end !
打印和程序流程相符。说明run.sh中set -e选项在set.sh中不起作用。看似此选项的只作用于当前脚本,不作用于其所调用的脚本。如此?
将run.sh脚本修改如下,并执行:

zhenglei@SzExdroid14:~/study/scripts$ cat run.sh

#!/bin/bash
set -e
 
. test_dir/set.sh
zhenglei@SzExdroid14:~/study/scripts$ ./run.sh
run start

说明set -e 选项对set.sh起作用。脚本作为一个进程去描述set -e选项的范围应该是:set -e选项只作用于当前进行,不作用于其创建的子进程。

set -e 命令用法总结如下:
1. 当命令的返回值为非零状态时,则立即退出脚本的执行。
2. 作用范围只限于脚本执行的当前进行,不作用于其创建的子进程。
3. 另外,当想根据命令执行的返回值,输出对应的log时,最好不要采用set -e选项,而是通过配合exit 命令来达到输出log并退出执行的目的。
 

注:编译此文档时,出现行间距不一致的情况 ,编辑器也没找到可调整的菜单。结果发现shift + enter / delete 键可以比较方便的控制。

转载地址:http://rufin.baihongyu.com/

你可能感兴趣的文章
os模块:文件所在目录位置
查看>>
操作文件时报错:zipfile.BadZipFile: File is not a zip file
查看>>
ubuntu基础常用命令(1)
查看>>
Ubuntu基础常用命令(03)——关机重启、vi 完~
查看>>
输入\数据转换类型\运算符\判断语句
查看>>
Linux 命令大全.速速收藏,不足欢迎补充
查看>>
多任务(进程线程)
查看>>
flask连接mysql-pycharm版
查看>>
nginx优化配置
查看>>
超简单nginx配置从入门到入土
查看>>
gunicorn
查看>>
raid
查看>>
lvm
查看>>
linux开机启动流程
查看>>
搭建nfs服务器
查看>>
centos7 最简单安装zabbix4.4.6的方法
查看>>
编译和解释的区别
查看>>
搭建lvs集群NAT模式
查看>>
使用Zabbix4.4自定义模板监控 MySQL 性能
查看>>
计算机网络
查看>>