shell脚本中set -e选项作用范围小结

 更新时间:2023年06月22日 08:36:16   作者:fc34235  
本文主要介绍了shell脚本中set -e选项作用范围小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

编写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 键可以比较方便的控制。

到此这篇关于shell脚本中set -e选项作用范围小结的文章就介绍到这了,更多相关shell set -e作用范围内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux中的Syslog命令

    Linux中的Syslog命令

    syslog是Linux系统默认的日志守护进程,默认的syslog配置文件是/etc/syslog.conf文件。接下来通过本文给大家分享Linux中的Syslog命令,感兴趣的朋友一起看看吧
    2017-09-09
  • shell进阶awk命令编排字段使用详解

    shell进阶awk命令编排字段使用详解

    这篇文章主要为大家介绍了shell进阶awk命令编排字段使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • linux网络相关命令汇总(6)

    linux网络相关命令汇总(6)

    这篇文章主要为大家汇总了linux网络相关命令,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • shell批量curl接口脚本的简单实现方法

    shell批量curl接口脚本的简单实现方法

    这篇文章主要跟大家介绍了关于shell批量curl接口脚本的简单实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用shell具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-08-08
  • Shell程序退出状态码的命令详解

    Shell程序退出状态码的命令详解

    在本篇文章当中主要给大家介绍一个shell的小知识——状态码。这是当我们的程序退出的时候,子进程会将自己程序的退出码传递给父进程,有时候我们可以利用这一操作做一些进程退出之后的事情,比如当程序执行失败或者被某个信号杀死我们就可以了解到,然后做出对应的措施
    2022-10-10
  • Linux命令行查看cpu(lm_sensors)和显卡温度(nvidia-smi)的操作方法

    Linux命令行查看cpu(lm_sensors)和显卡温度(nvidia-smi)的操作方法

    lm_sensors,是一款基于linux系统的硬件监控的软件。可以监控主板,CPU的工作电压,温度等数据,这篇文章主要介绍了Linux命令行如何查看cpu(lm_sensors)和显卡温度(nvidia-smi),需要的朋友可以参考下
    2022-12-12
  • 浅谈Linux磁盘修复e2fsck命令

    浅谈Linux磁盘修复e2fsck命令

    下面小编就为大家带来一篇浅谈Linux磁盘修复e2fsck命令。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • linux执行sh脚本报错:$’\r’: 未找到命令的完美解决方法

    linux执行sh脚本报错:$’\r’: 未找到命令的完美解决方法

    本文给大家介绍linux执行sh脚本报错:$’\r’: 未找到命令的完美解决方法,原因分析及解决办法给大家讲解的非常明白,感兴趣的朋友跟随小编一起看看吧
    2023-02-02
  • Linux下查看内存使用情况的方法总结

    Linux下查看内存使用情况的方法总结

    在做Linux系统优化的时候,物理内存是其中最重要的一方面,自然的,Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况,下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法,需要的朋友可以参考下
    2024-01-01
  • Shell脚本学习指南之查找与替换介绍

    Shell脚本学习指南之查找与替换介绍

    Shell脚本学习指南之查找与替换介绍,需要的朋友可以参考下
    2013-02-02

最新评论