Shell 异常处理

article/2025/9/13 22:47:46

原创:转载请注明出处 

#!/bin/bash
##################服务器执行以下脚本#############################
## 重新上传脚本到服务器 -> 部署启动的脚本#当任何一行的命令执行错误的时候(比如命令写错了)直接退出,不继续往下执行
function openErrexit {set -e
}
#当任何一行的命令执行错误的时候,继续往下执行,不如你没有安装java,
#但是你执行了java -version,此时会继续往下执行,不会因为错误停止
function closeErrexit {set +e
}
# 处理退出的方法
function _exit {#执行成功的标记is_exec_succ=$?if [ "A$execption" != 0 ]thenif [ "A$is_exec_succ" != "A0" ]thenecho "脚本执行异常中断,程序运行终止!"exit 1else_successfifi
}
# 处理失败的方法
function _fail {execption=0echo "程序员处理失败的逻辑。"exit 1
}# 处理成功的方法
function _success {echo "脚本执行成功..."echo 0
}# 处理开始的方法
function _start {echo "脚本开始执行..."
}#execption=0 表示程序处理的异常退出
#execption=-1 表示中断异常或执行成功
execption=-1
# 捕获退出的动作
trap _exit EXIT
_startecho "helloworld"

一、我的理解是首先将脚本执行的结果分为三种情况

1、程序处理的异常退出

        程序员判断,当前分支不满足条件,已经不需要继续向下执行

2、中断异常,不可预知的异常

        这种异常一般是程序员不可预料的,包含命令本省执行错误等一下低级错误。

3、执行成功

        这种一般是脚本按照程序员的逻辑顺利执行完成。

二、我的理解是把中断异常处理又分为两类

1、出现错误继续执行

        这种情况一般是怎么样的呢,比如说我现在服务器没安装java环境,但是我执行了java -version命令,这种情况下我是要继续执行的,为什么呢,因为我要根据我java -version的返回值来判断当前环境是不是安装了java环境,如果没有安装我就安装,如果安装了,那我就做我其他的事情。

2、出现错误终止执行

        这种情况一般是怎么样的呢,比如说我写了mkdir -p java, 然后又echo "aa" >> java,后面我还echo "脚本执行成功" exit 0,那显然不能这样。可能我举的例子不太恰当,想说明的是只要我脚本中有一行命令执行的返回值不为真,那么就中断脚本,停止继续向下运行。

三、如何才能达到这样的效果

        定义变量execption=-1、默认是-1表示中断退出或者执行成功的状态,0表示程序员主动退出的状态。

        

        当你想通过错误来判断你服务是否存在的时候,可以关闭,表示从下面一行开始之后的命令,当执行错误的时候,可以忽略继续向下执行。当你执行java -version时

 

         此时你可以通过$?来判断是不是安装了java环境,那为什么要关闭呢?因为你加了捕获EXIT的处理方法,如果你不关闭set +e,那么就会被捕获EXIT,然后被

处理掉,程序到这儿就算结束了。

        这个判断结束之后,可以通过调用 set -e开启,那么下面只要执行错误,都会EXIT,并且被_EXIT处理。如果是这样,那么就需要判断一下到底是执行完成正常退出,还是说错误退出呢,卡检查一下最后一行的返回值就行了,并且要是execption!=0 之后判断,execption==0说明程序员已经处理过了,不需要_EXIT 方法处理了。

如果理解有误,请评论区留言,欢迎指正。


http://chatgpt.dhexx.cn/article/UItpytx4.shtml

相关文章

java中的统一异常处理

目录 统一异常处理的原因 如果进行统一异常处理 1、编写统一异常处理类与方法 2、编写自定义异常类 3、定义异常枚举类 4、抛出指定异常 小提醒 统一异常处理的原因 在我们写代码的时候,因为各种场景需要进行各种校验,我们就可能会进行多种响应&…

JNI异常处理

前言 本文所要介绍的异常处理是指通过JNI调用java层方法时产生的异常处理,并不是指JNI调用Native层函数时产生的异常处理,如果童鞋们想要了解Native层的异常处理可以参考笔者之前的文章《C之异常处理》 按照java的经验,当发生异常而又没有捕…

Python——异常处理

文章目录 异常Python中的异常类捕获与处理异常自定义异常类with语句断言 异常 异常是在程序执行过程中发生的影响程序正常执行的一个事件。异常是Python对象,当Python无法正常处理程序时就会抛出一个异常。一旦Python脚本发生异常,程序需要捕获并处理它…

python异常处理输入不是整数_Python异常处理

异常处理: Python程序运行语法出错会有异常抛出不处理异常会导致程序终止 示例:用户输入一个整数转换成int型,如果用户输入的不是数字而是其他例如字母等则会出现异常 不使用异常处理代码的处理方法 #cat 异常处理.py abc = input("请输入一个数字") if not ab…

ARM的异常处理机制

异常种类 ARM共有如下7种异常模式: 复位(RESET):当处理器复位引脚有效时,系统产生复位异常中断。复位异常中断通常在系统加电和系统复位时发生,直接跳转到复位中断向量处执行称为软复位。未定义的指令(UDE…

spring异常处理

在项目中采用spring的异常处理机制: 示例一、在Controller中加ExceptionHandler注解定义异常拦截的方法,在方法中定义返回的页面: Controller public class ExceptionTestController {ExceptionHandlerpublic String handleException(Excep…

C语言异常处理

文章目录 前言一、 异常表达二、 异常报告三、 异常处理 前言 错误与异常: 错误与异常都是在程序编译或者运行时出现的错误, 不同的是,异常可以被开发人员捕捉和处理;而错误,一般不需要开发人员处理(也无法…

SpringBoot全局异常处理

文章目录 异常处理方案分类基于请求转发基于异常处理器基于过滤器 常见异常处理实现方案1. BasicExceptionController2. ExceptionHandler3. ControllerAdviceExceptionHandler4. SimpleMappingExceptionResolver5. HandlerExceptionResolver6. Filter 全局异常处理实现方案1. …

springboot整合之统一异常处理

特别说明:本次项目整合基于idea进行的,如果使用Eclipse可能操作会略有不同,不过总的来说不影响。 springboot整合之如何选择版本及项目搭建 springboot整合之版本号统一管理 springboot整合mybatis-plusdurid数据库连接池 springboot整合…

C++ 异常处理

目录 一、异常的定义 二、异常的抛出和捕获 1.throw 2.try...catch 3.异常安全 4.异常规范 三、系统预定义异常 四、用户自定义异常 一、异常的定义 异常在C用于错误处理,C语言中一般使用返回值表示错误,C对错误处理进行了扩展,统一使…

关于异常处理的知识整理

目录 1.什么是异常? 2.异常继承结构 3.异常结构继承图 4.关于异常处理的两种方式: 5.异常对象有两个非常重要的方法 1.什么是异常? 程序在执行过程中不正常的情况称为异常,以类和对象的形势存在,可以通过异常类&am…

异常处理---

异常 异常处理 例: public class Demo{public static void main(String[] args) {System.out.println("开始");method();System.out.println("结束");}public static void method(){int[] arr{1,2,3};System.out.println(arr[3]);//数组索引…

异常处理

1.相关概念的介绍 1)异常情形:是指阻止当前方法或作用域继续执行的问题。 2)监控区域:一段可能产生异常的代码,并且后面跟着处理这些异常的代码。 3)try块:如果在方法的内部或者在方法内部调…

异常及异常处理

一、异常的概念 定义: 异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误。 处理态度: 当捕获到异常以后一定要做出处理,哪怕是把这个异常的错误信息打印出来,这是一种良好的编程习惯。 …

异常处理(throw、throws、try-catch)

Java异常处理的五个关键字try、catch、finally、throw、throws 1.抛出异常throw 在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接收参数。那么,当调用方法使用接收到的参数时,首先需要…

SpringBoot+Axis2搭建WebService服务端

SpringBootAxis2搭建WebService服务端 之前用过Spring Axis2搭建过WebService项目,网上也有很多资料教程,最近需要在一个SpringBoot项目中添加Axis2的服务端,在网上找了很久,没有找到相关教程,最终经过大神朋友的指点…

AXI(2)完结

四、握手 4.1握手过程 所有的五个通道都是通过相同的VALID/READY握手处理来传输地址、数据和控制信息。 双向握手的机制意味着主机和从机之间传输数据时,都可以控制传输的速率,只有当VALID和READY同时为高电平时,传输才会发生。 发送方&a…

读Axis2用户帮助文档 (axis2中文文档)

作者:李红霞 时间:2006-10-19 声明:本文可以算作Axis2用户手册的翻译,但是翻译后的文本是经过作者理解写出来的,可能有些偏差,欢迎讨论。本文属作者原创,允许转载,但请注明出处。 英…

AXI 3.0 (1)

一、AXI简介 AMBA3.0中新增加了一种总线——AXI(Advanced eXtensible Interface,高级扩展接口)。 AMBA AXI 协议的目标是高性能、高频的系统设计,其包含了若干特性。 适合高带宽和低延迟的设计 提供高频操作,无需使…

Apache axis2 + Eclipse 开发 WebService

一、简介 Apache Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化…