添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
#!/bin/bash
##################服务器执行以下脚本#############################
## 重新上传脚本到服务器 -> 部署启动的脚本
#当任何一行的命令执行错误的时候(比如命令写错了)直接退出,不继续往下执行
function openErrexit {
    set -e
#当任何一行的命令执行错误的时候,继续往下执行,不如你没有安装java,
#但是你执行了java -version,此时会继续往下执行,不会因为错误停止
function closeErrexit {
    set +e
# 处理退出的方法
function _exit {
  #执行成功的标记
  is_exec_succ=$?
  if [ "A$execption" != 0 ]
    if [ "A$is_exec_succ" != "A0" ]
      echo "脚本执行异常中断,程序运行终止!"
      exit 1
      _success
# 处理失败的方法
function _fail {
  execption=0
  echo "程序员处理失败的逻辑。"
  exit 1
# 处理成功的方法
function _success {
  echo "脚本执行成功..."
  echo 0
# 处理开始的方法
function _start {
  echo "脚本开始执行..."
#execption=0 表示程序处理的异常退出
#execption=-1 表示中断异常或执行成功
execption=-1
# 捕获退出的动作
trap _exit EXIT
_start
echo "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 方法处理了。

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

似乎好像大概有句话是这么说得,好程序与坏程序之间的区别就在于它的鲁棒性,也就是在异常情况下该程序是否还是在可hold住状态,能否不死,不崩溃,或者不做出一些超出预期的事情。那要做好这些,自然而然就要学会如何去处理异常。平时写php或者java程序等等的时候,很多人都会去注重对于异常的处理,比如try..catch等等,但往往在写一些脚本的时候,忽视了对于异常的判断。本文主要就是写如何在 但是上述方法只能获取标准输出(stdin),不能获取标准错误(stderr)。笔者准备写一个 Shell 脚本,需要获取一行命令的错误输出,存于一个变量中,供后续使用。相当于一个黑洞,或者说垃圾桶,可以把不需要的东西都重定向到这里去。当然,笔者只想保留标准错误,需要筛去标准输出,此时需要同时把原标准输出重定向到。默认重定向标准输出。则可以把标准错误重定向到标准输出,于是就能存于变量。不存在,那么上述命令会产生一个标准错误输出,而用。就是把标准错误重定向到标准输出,以便被变量获取。 在Python中,异常也可以嵌套,当内层代码出现异常时,指定异常类型与实际类型不符时,则向外传,如果与外面的指定类型符合,则异常被处理,直至最外层,运用默认处理方法进行处理,即停止程序,并抛出异常信息。如下代码: raise IndexError except TypeError: print('get handled') except SyntaxError: print('ok') 运行程序: Traceback (most recent call last): File “<py shell >”, line 3, in <module> 原文:https://www.cnblogs.com/liqiu/p/4106040.html 一、STDOUT、STDERR   如果要获取 SHELL 脚本的异常输出,就需要首先理解 SHELL 命令的标准输出STDOUT、标准错误STDERR。   当我们在编写 shell 脚本时,我们会非常频繁地操作执行命令的标准输入stdin、标准输出stdout、标准错误stderr。当我们执行脚本文件... 将脚本中所有打印输出到日志 # 方法一: 在脚本的前面加上下面的命令即可,但这种方式与 trap 命令不兼容,即捕获不了ctrl c exec &> >(tee -a /home/xiaoming/log/test.log) # 方法二: 递归调用 if [[ $1 == "log" ]]; then main "$@" 写 SHELL 好久了,经常被异常困扰,可竟然坚持了若干年没用过,回想以前服务过的公司,阿弥陀佛,罪过罪过。废话少说,希望此篇文章可以协助大家和我彻底结束 SHELL 脚本就是LINUX命令集合的初级阶段。 一、STDOUT、STDERR 如果要获取 SHELL 脚本的异常输出,就需要首先理解 SHELL 命令的标准输出STDOUT、标准错误STDERR。 当我们在编写 shell 脚本时,我们会... 第一行的内容指定了 shell 脚本解释器的路径,而且这个指定路径只能放在文件的第一行。第一行写错或者不写时,系统会有一个默认的解释器进行解释。实现功能读取指定配置文件中的Oracle数据库连接,清空传入变量表的数据,以及清除数据之后的结果进行捕获分析。获取oracle环境变量并在当前执行用户中生效,只在这个会话中生效。加载外部文件,将外部文件中的变量引用到当前 shell 脚本中。由于执行OracleSQL进入新的进程,使用判断返回值。相同,但是使用时加引号,并在引号中返回每个参数。echo 用于字符串的输出。 在日常的自动化测试中,尤其 shell 脚本,在针对需要多个程序运行, shell 脚本顺序执行过程可能会有中间环节会运行失败,抛出异常停止运行并报错,然而 shell 的其他下方语句仍然会继续往下执行,有时需要规避这类问题,使得出错后就退出后面的执行。这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!可以看到执行main.py后,哪怕遇到报错,程序非正常退出,依然执行了do.py,这不符合我们的需求。增加set -e,推荐。