如何在指令碼設定set -e之後捕獲異常並完成相關操作執行
背景:指令碼中設定set -e 遇到報錯即停止指令碼執行 ,取消set -e有可能會造成更大的錯誤,因此為了處理某個異常之後能夠繼續執行,給出以下解決辦法。
說明:set -o xtrace 列印指令碼執行日誌。
以一個例子來說明:刪除目錄下的某一個不存在的檔案然後再次檢視該檔案會報錯!
報錯的指令碼
截圖中標記的地方會丟擲一個異常,因為test.txt是不存在的,如下圖指令碼執行日誌:
原因分析:因為cat /home/test.txt檢視一個不存在的檔案,這條命令返回非0!
如截圖,如果命令正常執行,執行echo $?會返回0,如果執行異常則返回非0!
解決辦法:使用"||",在當前命令執行失敗之後,會執行||後面的內容,如下:
方案1:修改之後的指令碼,此時會執行到此處列印do next step!,然後退出
修改之後指令碼執行日誌
方案2:捕獲異常後執行相關函式解決該異常,簡單示例如下:
指令碼
指令碼執行日誌
以上是寫指令碼時總結出來的經驗,如有雷同純屬巧合,歡迎留言.... :)
相關推薦
如何在指令碼設定set -e之後捕獲異常並完成相關操作執行
背景:指令碼中設定set -e 遇到報錯即停止指令碼執行 ,取消set -e有可能會造成更大的錯誤,因此為了處理某個異常之後能夠繼續執行,給出以下解決辦法。 說明:set -o xtrace 列印指令碼執行日誌。 以一個例子來說明:刪除目錄下的某一個不存在的檔案然後再次檢
shell 指令碼中set -e選項作用範圍
編寫shell指令碼沒多久,對於其許多命令的具體用法還不太熟悉。最近剛好有需求,就嘗試用指令碼去實現。其中就有用到set -e選項。 在用這個命令之前,也查過其功能,描述比較簡單:就是當命令以非零狀態退出時,則退出shell。主要作用是,當指令
Unix/Linux 指令碼中 “set -e” 的作用
1 2 #!/bin/bash
@Transactional使用try->catch捕獲異常並回滾方法
業務需求:需要捕獲到@Transactional中的異常,並不影響事物回滾 @Transactional(rollbackFor = Exception.class) public void test() { try { updata();
Unix/Linux指令碼中"set -e"的作用
有些指令碼中會看到這樣的語句:#!/bin/bash set -e command 1 command 2 ... exit 0“set -e” 這句語句告訴bash如果任何語句的執行結果不是true則應該退出。這樣的好處是防止錯誤像滾雪球般變大導致一個致命的錯誤,而這些錯
Android自定義全域性捕獲異常並上傳,實現實時收集APP崩潰crash資訊
一、異常收集 目的:在APP上線後,可能會出現一些BUG導致了APP的閃退,使用者體驗就非常致命,我們一定要第一時間找到問題的所在,去處理掉問題,處理有方法有兩種,一是發一個修改後的新版本,另一個是用熱修復釋出一個更新補丁,具體選擇哪一種符合自己需求就行。 我們主要說的異常
解釋bash指令碼中set -e與set -o pipefail的作用
man set中的解釋: set [--abefhkmnptuvxBCEHPT] [-o option] [arg ...] set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...]... ...
SpringBoot @Transactional 中捕獲異常並回滾解決方法
業務需求:需要捕獲到@Transactional中的異常,並不影響事物回滾@Transactional(rollbackFor = Exception.class) public void test() { try { updata();
JAVA學習之類與物件例題分享(兩點確定直線並進行相關操作)
最近在自學JAVA,學到類與物件章節,分享一個自我感覺還可以的例題答案,自己編寫的,發出來希望大神們知道一二。 源程式如下: package Line_Test; public class Line_Test { public static void main(String[] a
Spring Boot整合Mybatis並完成CRUD操作
MyBatis 是一款優秀的持久層框架,被各大網際網路公司使用,本文使用Spring Boot整合Mybatis,並完成CRUD操作。 為什麼要使用Mybatis?我們需要掌握Mybatis嗎? 說的官方一點: MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBa
業務層刻意拋出異常,全局異常的捕獲它並按格式返回
ges pub .cn public oba src lob system server 對於業務層的程序的致命錯誤,我們一直的做法就是直接拋出指定的異常,讓程序去終斷,這種做法是對的,因為如果一個業務出現了致命的阻塞的問題,就沒有必要再向上一層一層的返回了,但這時有個問題
為Android程式設定全域性的捕獲異常,提升使用者體驗(UncaughtExceptionHandler捕獲全域性異常)
主要方法:通過Thread.setDefaultUncaughtExceptionHandler()方法將異常處理類設定到執行緒上即可。 實現類 public class CrashHandler implements UncaughtExceptionHandler {
jquery 設定style:display、$.post請求捕獲異常
style.display (“#id”).css(‘display’,’none’); $(“#id”).css(‘display’,’block’); 或: $(“#id”)[0].style.display = ‘none’;
Python logging模組 捕獲異常,並儲存為 logging 檔案
____tz_zs logging模組簡單使用 basicConfig . #!/usr/bin/python2.7 # -*- coding:utf-8 -*- """ @author: tz_zs """ import logging import ti
WPF異常捕獲,並使程式不崩潰!
在.NET中,我們使用try-catch-finally來處理異常。但,當一個Exception丟擲,丟擲Exception的程式碼又沒有被try包圍時,程式就崩潰了。 這些異常往往是你沒有注意到的。在WPF中,提供了一種處理這些個異常的方式。 舉例來說明。 1.先
js下載檔案,並捕獲異常的記錄
在伺服器返回ResponseEntity<byte[]>這種二進位制流的情況下,對於異常的捕獲封裝返回的卻仍然是json,今天折騰了很久 總結如下: 該介面返回值為ResponseEntity<byte[]>,有異常攔截@[email p
jenkins,Tomcat重啟指令碼,設定jvm引數之後遇到了一個坑。
如下是我的重啟指令碼 #/bin/sh source /etc/profile sh /opt/kms_jsoncach.sh pid=`ps -ef | grep "APPmanager" | grep -v 'grep\|tail\|more\|le
go語言捕獲panic異常並轉化為error
package main import ( "fmt" "errors" ) func testPanic2Error() (err error) { //捕獲 and 恢復 panic. /*注意defer延
Android項目引入actionbarsherlock作為library後混淆之後的異常
菜單 解決 div 破壞 att pla track library and 現象: Android APP中,引入actionbarsherlock 開源庫作為滑動菜單,調試執行沒有問題,項目混淆打包後,程序執行異常退出,截獲異常log為: <spa
C#高級編程八十一天----捕獲異常
意思 esp rgs track com nbsp 原因 修飾 tracking 捕獲異常 前面主要說了關於異常的一些基礎和理論知識,沒有進入到正真的異常案例,這一講通過幾個案例來描寫敘述一下異常的捕獲和處理. 案例代碼: using System; usi