[Linux]设置脚本运行错误立即退出

一、简介

工作中常需要在linux环境下使用shell脚本自动化运行多条命令,在顺序执行多条命令时,需要在前一条命令运行失败时立刻结束脚本,停止运行接下来的其他命令。
本文介绍了三种实现该目标的方法,分别是:使用&&命令执行控制符,使用set -e设置shell options和使用trap 'do_somthing' ERR捕捉ERR信号进行自定义处理。

二、代码示例

1. 使用&&命令执行控制符

命令之间使用&&连接,实现逻辑与的功能,只有前面的命令成功运行才会继续运行之后的命令。
命令示例:

# command without error
echo "first command" && echo "second command" && echo "third command"

运行结果如下:

first command
second command
third command

若某条命令存在错误无法运行,则会立即结束,不再执行之后的命令。
命令示例:

# command with error
echo "first command" && echooo "second command" && echo "third command"

运行结果如下:

first command
echooo: command not found

2. 使用set -e命令

set -e命令可以设置shell在运行时,如果遇到管道返回非0状态(程序成功运行退出返回0),则立即退出。管道可能由单个简单命令,列表或复合命令组成。

set -e

Exit immediately if a pipeline (see Pipelines), which may consist of a single simple command (see Simple Commands), a list (see Lists of Commands), or a compound command (see Compound Commands) returns a non-zero status.

main.sh脚本示例:

#!/usr/bin/bash
# command without error
set -e
echo "first command"
echo "second command"
echo "third command"

运行main.sh后的结果如下:

first command
second command
third command

main.sh脚本中存在错误,无法运行,则会退出脚本。例如:

#!/usr/bin/bash
set -e
echo "first command"
# command with error
echooo "second command"
echo "third command"

运行main.sh后的结果如下:

first command
./main.sh: line 4: echooo: command not found

3. 使用trap命令

在What does ‘set -e’ mean in a Bash script? 中网友给出了另一个用于在shell中中断错误命令运行的方法,即使用trap 'do_something' ERR 命令。
trap命令是一个shell内建命令,它用来在脚本中指定信号如何处理。例如,trap "echo 'error' && exit" ERR命令就是设置在shell脚本运行时,若遇到ERR信号则先使用echo命令打印error然后退出。

main.sh脚本示例:

#!/usr/bin/bash
# command without error
trap "echo 'error' && exit" ERR
echo "first command"
echo "second command"
echo "third command"

运行main.sh后的结果如下:

first command
second command
third command

main.sh脚本中存在错误,无法运行,则会先打印error然后退出脚本。例如:

#!/usr/bin/bash
trap "echo 'error' && exit" ERR
echo "first command"
# command with error
echooo "second command"
echo "third command"

运行main.sh后的结果如下:

first command
./main.sh: line 5: echooo: command not found
error

三、参考

[1]. linux中的分号&&和&,|和||说明与用法
[2]. What does ‘set -e’ mean in a Bash script?
[3]. Linux trap用法介绍
var code = “ae301d0e-c65a-4bcc-b771-f85ac0074d55”

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

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

相关文章

HTML案例-1.标签练习

效果 源码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head&g…

ParaView的远程模式操作(亲测有效)

ParaView的远程模式 OpenFOAM用户一定要用过ParaView可视化软件&#xff0c;这个软件可以方便地读取OpenFOAM的数据进行种类丰富的可视化操作。用ParaView可视化OpenFOAM数据很简单&#xff0c;只需要在算例目录下运行即可paraFoam&#xff08;注一&#xff09;但是&#xff0c…

物资管理系统建设方案

二、 项目概述 2.1 项目背景 2.2 现状分析 2.2.1 业务现状 2.2.2 系统现状 三、 总体需求 3.1 系统范围 3.2 系统功能 3.3 用户分析 3.4 假设与依赖关系 四、 功能需求 五、 非功能性需求 5.1 用户界面需求 5.2 软硬件环境需求 5.3 产品质量需求 5.4 接口需求 …

高效文件管理,批量复制文件夹名称 ,轻松提升工作效率

在信息爆炸的时代&#xff0c;电脑中的文件夹数量与日俱增&#xff0c;管理和整理这些文件夹成为一项繁琐的任务。您是否曾因为需要复制大量文件夹的名称而感到苦恼&#xff1f;现在&#xff0c;我们为您带来了一款能够一键批量复制文件夹名称的神奇工具&#xff0c;让您的效率…

centos安装docker-compose

centos安装docker-compose 1 查看Docker版本2 选择docker-compose版本3 安装4 添加可执行权限5 测试6 卸载7 运行项目 1 查看Docker版本 docker version2 选择docker-compose版本 docker-compose官网地址&#xff1a;Compose file version 3 reference | Docker Documentatio…

Python实战:数据清洗与预处理

一、引言 在机器学习和数据科学项目中&#xff0c;数据清洗与预处理是至关重要的一步。数据清洗是指识别和纠正数据集中的错误或不一致之处&#xff0c;数据预处理则包括对数据进行转换、归一化、编码等操作&#xff0c;以便更好地适用于机器学习算法。Python作为一门流行的编…

在SAP BAS中创建你的第一个Fiori项目

1. 前言 本文将通过step by step的方式介绍如何在SAP Business Studio中创建一个Fiori项目&#xff0c;并通过Mock Data启动Fiori应用程序。 2. Demo Step1: 登录BAS并创建Dev Space Step2: 进入创建好的Dev Space&#xff0c;通过Get Started页面&#xff0c;选择New Projec…

STM32-DMA数据转运

DMA进行转运的条件 1&#xff1a;开关控制&#xff0c;DMA_CMD必须使能2&#xff1a;传输计数器必须大于03&#xff1a;触发源必须有触发的信号

Zookeeper(五)Zokeeper 环境搭建与Curator使用

目录 一 环境搭建1.1 单机环境搭建1.2 可视化工具ZooKeeper Assistant1.3 集群环境搭建 二 常用命令1.1 命令行语法1.2 数据节点信息1.3 节点类型 三 CuratorAPI使用3.1 依赖3.1 创建会话3.2 基本使用增删改查3.3 ACL权限控制3.4 分布式锁3.5 分布式计数器3.6 分布式Barrier3.7…

婴儿洗衣机硬核测评:希亦、鲸立、小吉婴儿洗衣机性能大比拼!

如果你非常注重婴儿衣物的卫生问题&#xff0c;那么婴儿洗衣机则是非常理想的选择。毕竟&#xff0c;在婴儿吃奶或者接触其他材料时&#xff0c;其抵抗力是比较弱的&#xff0c;再加上普通洗衣机无法对婴儿的衣物进行有效的消毒处理&#xff0c;轻则会对婴儿的健康造成威胁&…

基于 HBase Phoenix 构建实时数仓(5)—— 用 Kafka Connect 做实时数据同步

目录 一、总体架构 二、安装配置 MySQL 1. 创建 mysql 用户 2. 建立 MySQL 使用的目录 3. 解压安装包 4. 配置环境变量 5. 创建 MySQL 配置文件 6. MySQL 系统初始化 7. 启动 mysql 服务器 8. 创建 dba 用户 三、配置 MySQL 主从复制 四、安装部署 Kafka Connector…

密码学——传统加密技术和公钥加密

传统加密技术和公开密钥 传统加密技术基本概念基本原理公开密钥基本概念基本原理传统加密技术 传统加密,即对称加密或称之为单钥加密,是公钥加密技术出现之前的主流加密技术,甚至在现在,仍然具有广泛应用。 基本概念 回顾一下一些基本概念: 明文,原始的消息和数据,也…

gin | gin环境搭建与示例工程

要安装Gin软件包&#xff0c;需要先安装Go并设置Go工作区。 1. 下载并安装 gin&#xff1a; go get -u github.com/gin-gonic/gin 2. 将 gin 引入到代码中&#xff1a; import "github.com/gin-gonic/gin" 3. (可选) 如果使用诸如 http.StatusOK 之类的常量&a…

23.python标准库之turtle库

一、窗体函数 turtle.setup(width, height, startx, starty) width:窗口宽度 height:窗口高度 startx:窗口与屏幕左侧距离&#xff08;单位象素&#xff09; starty:窗口与屏幕顶部距离&#xff08;单位象素&#xff09; 二、画笔状态函数 三、画笔运动函数

Java字符串精通之旅:从新手到专家

目录 一、字符串的创建 1.直接赋值 2.使用构造方法 二、字符串不可变性 三、常用操作 1.字符串长度 2.连接字符串 3.格式化字符串 四、示例代码&#xff1a;String类应用 五、String中常用的方法 在Java编程世界里&#xff0c;字符串无疑是最常用的数据类型之一。不论…

想要把PDF文件转TXT文本编辑改动怎么办?三秒钟帮你搞定 PDF编辑器

pdf是一种便携文件格式&#xff0c;是由Adobe公司所开发的独特的跨平台文件格式。PDF文件以PostScript语言图象模型为基础&#xff0c;无论在哪种打印机上都可保证精确的颜色和准确的打印效果&#xff0c;即PDF会忠实地再现原稿的每一个字符、颜色以及图象。有点遗憾的是&#…

golang实现循环队列

思路&#xff1a; 基于数组实现。当容量为k时&#xff0c;我们初始化一个容量为k1的数组arr&#xff0c;方便区分队列空和满。 当rearfront时&#xff0c;判断队列为空&#xff1b; 当(rear1) % len(arr) front时&#xff0c;判断队列为满&#xff1b; package mainimport (&…

【好用】Star超36.8k,一个的免费通用数据库管理工具

关于数据库管理工具&#xff0c;大家可能都在用SQLyog、Navicat、MySQL-Front、SQL Studio、MySQL Workbench等等&#xff0c;这些管理工具不是不好用&#xff0c;就是要变魔术才可以用&#xff0c;今天 V 哥给大家推荐一个即好用&#xff0c;又免费的可视化通用数据库管理工具…

Git 删除.git 目录

Git 删除.git 目录 如上图&#xff0c;删除项目中的.git目录 ①在windows系统上&#xff0c;进入该项目的根目录 ②在根目录下打开Git bash ③使用rm -rf .git命令递归删除.git目录 rm -rf .git在删除后想重新初始化&#xff0c;可以参考下面链接里的内容 Git初始化及远程推送…

腾讯云优惠券领取的几种方法,助你降低云服务成本

腾讯云优惠券领取的几种方法&#xff0c;助你降低云服务成本 一、最新优惠卷二、最新活动 腾讯云—腾讯倾力打造的云计算品牌&#xff0c;以卓越科技能力助力各行各业数字化转型&#xff0c;为全球客户提供领先的云计算、大数据、人工智能服务&#xff0c;以及定制化行业解决方…