#!/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,推荐。