Unix/Linux shell脚本中 “set -e” 的作用

简介:

1
2
3
4
5
6
#!/bin/bash
set  -e
command  1
command  2
...
exit  0

----------------------------------------------------------

Every script you write should include set -e at the top. This tells bash that it should exit the script if any statement returns a non-true return value. The benefit of using -e is that it prevents errors snowballing into serious issues when they could have been caught earlier. Again, for readability you may want to use set -o errexit.

你写的每个脚本都应该在文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出。这样的好处是防止错误像滚雪球般变大导致一个致命的错误,而这些错误本应该在之前就被处理掉。如果要增加可读性,可以使用set -o errexit,它的作用与set -e相同。


Using -e gives you error checking for free. If you forget to check something, bash will do it for you. Unfortunately it means you can't check $? as bash will never get to the checking code if it isn't zero. There are other constructs you could use:

使用-e帮助你检查错误。如果你忘记检查(执行语句的结果),bash会帮你执行。不幸的是,你将无法检查$?,因为如果执行的语句不是返回0,bash将无法执行到检查的代码。你可以使用其他的结构:

 copy

1
2
3
4
5
command  
if  "$?" - ne  0];  then   
    echo  "command failed" ;   
    exit  1;   
fi


could be replaced with

能够被代替为


1
command  || {  echo  "command failed" exit  1; }

 说明:|| command未执行成功,则执行 { echo "command failed"; exit 1; }


or

或者

 copy

1
2
3
4
if  command then  
     echo  "command failed" ;   
    exit  1;   
fi


What if you have a command that returns non-zero or you are not interested in its return value? You can use command || true, or if you have a longer section of code, you can turn off the error checking, but I recommend you use this sparingly.

如果你有一个命令返回非0或者你对语句执行的结果不关心,那你可以使用command || true,或者你有一段很长的代码,你可以关闭错误检查(不使用set -e),但是我还是建议你保守地使用这个语句。



本文转自 Mr_sheng 51CTO博客,原文链接:http://blog.51cto.com/sf1314/2062713

相关文章
|
SQL 监控 NoSQL
架构师第一课,一文带你玩转 ruoyi 架构
我理解的架构/框架应该有以下功能: 1.满足日常开发功能,如单点登陆、消息队列、监控等; 2.规范开发者的开发,指定代码格式、注释等; 3.提高开发效率,提供一系列的封装方法,并减少bug的产生率。 下文将详细介绍ruoyi框架。
9322 1
架构师第一课,一文带你玩转 ruoyi 架构
|
消息中间件 存储 缓存
Linux下kafka之C/C++客户端库librdkafka的编译,安装以及函数介绍(1)
Linux下kafka之C/C++客户端库librdkafka的编译,安装以及函数介绍
4121 0
|
SQL Java 测试技术
再也不需要手写 SQL 造数据了
DBeaver 是一个功能非常完善的数据库客户端,它有 开源免费版本:https://github.com/dbeaver/dbeaver, 企业版:https://dbeaver.com/
再也不需要手写 SQL 造数据了
|
4月前
|
人工智能 数据挖掘 Linux
阿里云/本地部署OpenClaw 配置 AI Agent团队实战:从1扩至8再精简为4的完整复盘+避坑指南
在AI Agent全面落地的2026年,越来越多用户尝试用OpenClaw(Clawdbot)搭建专属AI团队,替代人工完成内容创作、运营分发、技术维护、数据分析等工作。但很多人在搭建过程中陷入盲目扩张误区:从单个智能体起步,不断新增角色,最终导致管理成本飙升、上下文断裂、产出质量下滑、系统资源浪费。
727 2
|
12月前
|
传感器 监控 安全
生产管理核心:5口诀、6M1E、7要点、8工具、9字诀、10公式全解析
本文系统解析了企业生产管理中的核心方法与实战工具,涵盖班组长质量管控五大口诀、6M1E分析法、主管八大管理工具及十大质量指标等内容,为企业提升生产效率、控制质量风险提供全面指导。
|
XML API Android开发
Android 自定义View 之 圆环进度条
Android 自定义View 之 圆环进度条
482 0
|
Shell Linux C语言
CentOS完美升级gcc方案
CentOS完美升级gcc方案
3582 0
|
资源调度 分布式计算 Hadoop
Yarn【关于配置yarn-site.xml的注意事项】
Yarn【关于配置yarn-site.xml的注意事项】
|
Shell 网络安全 Android开发
如何adb connect公网的安卓设备
如何adb connect公网的安卓设备
|
JavaScript 前端开发
【Vue3从零开始-实战】S4:组件拆分和使用vue指令精简页面代码
【Vue3从零开始-实战】S4:组件拆分和使用vue指令精简页面代码
985 0
【Vue3从零开始-实战】S4:组件拆分和使用vue指令精简页面代码

热门文章

最新文章