【Linux系列】Linux 和 Unix 系统中的`set`命令与错误处理

news2024/11/24 19:04:05

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

      • `set -e`:立即退出选项
        • 好处与应用场景
      • `set +e`:取消立即退出选项
        • 应用场景
      • 错误处理的最佳实践
        • 使用`command || true`忽略错误
        • 临时关闭错误检查

在 Linux 和 Unix 系统中,脚本的编写和执行是日常系统管理中不可或缺的一部分。脚本的正确执行和错误处理对于保证系统稳定性和数据完整性至关重要。set命令是 shell 中一个强大的工具,它允许用户设置或取消设置 shell 选项和位置参数,从而控制脚本的行为。特别是set -eset +e这两个选项,它们直接影响脚本在遇到错误时的处理方式。
在这里插入图片描述

set -e:立即退出选项

set -e是一个强大的 shell 选项,它告诉 shell 在任何命令执行失败时立即退出脚本。这意味着,如果脚本中的任何一个命令返回非零状态(即表示错误或异常),shell 将不会继续执行后续的命令,而是立即终止脚本。这种机制有助于及早发现和处理错误,防止错误累积导致更严重的问题。

好处与应用场景

使用set -e的好处是显而易见的。首先,它提供了一种免费的误差检查机制。开发者不需要在每个命令后手动检查返回值,shell 会自动帮助检查。这不仅简化了代码,也减少了因忘记检查返回值而导致的错误。其次,set -e有助于提高脚本的健壮性,因为它强制脚本在遇到错误时立即停止,避免了错误继续传播和累积。

然而,set -e也有其局限性。如果脚本中有命令预期会返回非零值,或者开发者不关心某个命令的返回值,那么使用set -e可能会导致脚本意外终止。在这种情况下,开发者可以使用command || true来忽略错误,或者暂时关闭错误检查,但这种做法应该谨慎使用。

set +e:取消立即退出选项

set -e相反,set +e用于取消set -e的效果。当设置了set +e后,即使命令执行失败,脚本也会继续执行。这是 shell 的默认行为,允许脚本在遇到错误后继续运行。

应用场景

set +e的应用场景通常涉及到那些即使部分命令失败也不会影响整体流程的脚本。例如,在处理一系列文件时,即使某些文件不存在或无法读取,脚本仍然可以继续处理其他文件。在这种情况下,set +e允许脚本忽略个别错误,继续执行。
在这里插入图片描述

错误处理的最佳实践

虽然set -e提供了方便的错误检查机制,但在实际应用中,最佳实践是明确检查每个命令的返回值,并根据需要处理错误。这样做的好处是,开发者可以对错误进行更精细的控制,例如记录错误日志、重试命令或执行特定的错误处理代码。

使用command || true忽略错误

在某些情况下,如果某个命令的失败不会影响脚本的继续执行,可以使用command || true来忽略错误。这个表达式的含义是,如果command执行成功,则继续执行;如果失败,则执行true命令,true命令总是返回成功状态,因此脚本会继续执行。

临时关闭错误检查

在处理复杂逻辑时,有时可能需要暂时关闭错误检查。这可以通过在脚本中嵌套set +eset -e来实现。例如:

# 一些需要严格错误检查的代码
set -e

# 一些可以容忍错误的代码
set +e

这种方法允许开发者在需要时关闭错误检查,而在其他部分保持严格的错误检查。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2234592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第537题复数乘法

题目: 题解: class Solution:def complexNumberMultiply(self, num1: str, num2: str) -> str:real1, imag1 map(int, num1[:-1].split())real2, imag2 map(int, num2[:-1].split())return f{real1 * real2 - imag1 * imag2}{real1 * imag2 imag1…

同三维T610UHK USB单路4K60采集卡

USB单路4K60HDMI采集卡,支持1路4K60HDMI输入和1路4K60HDMI环出,1路MIC输入1路Line IN音频输入和1路音频输出,录制支持4K60、1080P120,TYPE-C接口,环出支持1080P240 HDR 一、产品简介: 同三维T610UHK是一款USB单路4K60HDMI采集卡,…

设置JAVA以适配华为2288HV2服务器的KVM控制台

华为2288HV2服务器比较老旧了,其管理控制台登录java配置比较麻烦,华为的ibmc_kvm_client_windows客户端测试了几个版本,连接控制台也有问题,最终安装JDK解决。 一、测试环境 主机为WindowsServer2012R2,64位系统 二、Java软件包…

腾讯混元3D生成大模型“ Hunyuan3D-1.0”正式开源

腾讯公司近日宣布,其最新的MoE模型“混元Large”以及混元3D生成大模型“Hunyuan3D-1.0”已正式开源,供企业及开发者免费下载并商用。 腾讯混元3D生成大模型是业界首个同时支持文字、图像生成3D的开源大模型,首批开源模型包含轻量版和标准版&…

论文阅读- --DeepI2P:通过深度分类进行图像到点云配准

目前存在的问题: 单模态配准具有局限性,多模态研究很少跨模态图像到点云配准问题是求解相机坐标系与点云之间的旋转矩阵R ∈ SO(3)和平移向量t ∈ R3。 这个问题很困难,因为由于缺乏点到像素的对应关系,无法使用 ICP、PnP 和捆绑调…

MySQL表设计(三大范式 表的设计)

1.上讲约束复习: 1.NOT NULL 非空约束,被指定NOT NULL的列,值不允许为空(必填) 2. UNIQUE 唯一约束,这个列里的值在表中是唯一的,也就是说不能重复 3. PRIMARY KEY 主键约束,可以看做是NOT NULL和UNIQUE…

【修订中】js 中apply call bind 用法

一、call、apply可以翻译成继承或者借调 区别:传参不同 可以调用函数可以改变函数中this的指向 二、js 语法词法: 普通函数 构造函数: 为什么不在构造函数中写方法 function Student(n, a) {this.uname n;this.age a;this.sayHi func…

Android15音频进阶之Cuttlefish搭建音频开发环境(九十二)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

【Unity】Unity拖拽在Android设备有延迟和卡顿问题的解决

一、介绍 在制作Block类游戏时,其核心的逻辑就是拖拽方块放入到地图中,这里最先想到的就是Unity的拖拽接口IDragHandler,然后通过 IPointerDownHandler, IPointerUpHandler 这两个接口判断按下和松手,具体的实现逻辑就是下面 public void On…

如何理解ETLCloud在iPaas中的关键角色

在当今的数字化时代,企业越来越依赖于其处理和分析数据的能力。为了实现这一目标,企业需要将各种异构的应用和数据源集成在一起,形成一个统一的数据视图。在这一过程中,ETL(Extract, Transform, Load)和iPa…

Linux多线程(个人笔记)

Linux多线程 1.Linux线程概念1.1线程的优点1.2线程的缺点 2.Linux线程VS进程3.Linux线程控制3.1创建线程3.2线程tid及进程地址空间布局3.3线程终止3.4线程等待 4.分离线程5.线程互斥5.1互斥锁mutex5.2互斥锁接口5.3互斥锁实现原理5.4可重入VS线程安全 6.线程同步6.1条件变量6.2…

【案例】故障雪花屏

开发平台:Unity 6.0 开发工具:Shader Graph 参考视频:【U2D Shader Graph】❄️雪❄️花❄️屏❄️   一、效果图 二、Shader Graph 路线图 三、案例分析 核心思路:雪花屏幕效果 (混合) 原图像 最终图像…

Hunyuan-Large:推动AI技术进步的下一代语言模型

腾讯近期推出了基于Transformer架构的混合专家(MoE)模型——Hunyuan-Large(Hunyuan-MoE-A52B)。该模型目前是业界开源的最大MoE模型之一,拥有3890亿总参数和520亿激活参数,展示了极强的计算能力和资源优化优…

arkUI:Column和Rom的间距设置(列向,横向)

arkUI:Column和Rom的间距设置(列向,横向) 1 主要内容说明2 相关内容举例和说明2.1 Column的间距(列的间距)2.1.1 源码1 (Column的间距)2.1.2 源码1运行效果 2.2 Row的间距&#xff0…

QML项目实战:自定义Combox

目录 一.添加模块 import QtQuick.Controls 2.4 import QtQuick.Templates 2.4 as T import QtGraphicalEffects 1.15 import QtQuick 2.15 as T2 二.自定义Combox 1.combox文字显示 2.设置下拉图标显示 3.下拉框中选中背景设置 4.下拉框中选中文字设置 5.下拉框设置…

【设计模式系列】原型模式(十一)

一、什么是原型模式 原型模式(Prototype Pattern)是一种创建型设计模式,它使得一个对象可以复制自身,从而创建一个与自己属性一致的新对象,而无需知晓对象创建的细节。这种模式允许动态地增加对象的数量,并…

h5web浏览器获取腾讯地图经纬度

https://lbs.qq.com/dev/console/application/mine 去腾讯地图申请key 然后前端页面引用 <script type"text/javascript" src"https://apis.map.qq.com/tools/geolocation/min?key自己的key&referertest"></script>调用代码 let geoloca…

微积分复习笔记 Calculus Volume 1 - 4.6 | Limits at Infinity and Asymptotes

4.6 Limits at Infinity and Asymptotes - Calculus Volume 1 | OpenStax

开源的flash浏览器 CelfFlashBrowser

特点 不用安装flash就可以玩flash游戏。 可播放在线和本地的swf文件 下载地址 &#xff1a;https://github.com/Mzying2001/CefFlashBrowser

游戏引擎中的颜色科学

游戏引擎中的渲染组件的作用是生成一个二维图片&#xff0c;在特定的时间从给定的视点观察的方向看到的一个三维空间的状态。他们的生成每一张图片都会被称为帧&#xff0c;他们生成的速度称为帧率。 像素 在每一帧中&#xff0c;游戏引擎的视觉输出基本上是一大堆彩色像素&a…