Bash 指令碼中的錯誤處理
導讀 | 本文講述了在 Bash 中處理錯誤的一些技巧,如何獲取錯誤程式碼、在執行 時獲得詳細輸出、處理除錯功能和錯誤重定向。使用這些技巧,系統管理員可以使他們的日常工作變得輕鬆。 |
退出狀態
在 Bash 指令碼中,
$?
將列印退出狀態。如果返回零,則表示沒有錯誤。如果不為零,結論就是任務可能存在一些問題。
如下是一個簡單例子:
[root@localhost ~]# cat myscript.sh #!/bin/bash mkdir learning echo $?
如果執行上述指令碼一次,它將列印 0,因為該目錄不存在,因此指令碼將建立它。如果第二次執行該指令碼,將獲得一個非零值,如下所示:
[root@localhost ~]# sh myscript.sh [root@localhost ~]# sh myscript.sh mkdir: cannot create directory ‘learning’: File exists 1
最佳實踐
建議透過將
set -x
新增到
指令碼來啟用除錯模式,如下所示:
[root@localhost ~]# cat test3.sh #!/bin/bash set -x echo "Hello World!" mkdiir testing
然後執行指令碼檢視:
[root@localhost ~]# sh test3.sh + echo 'Hello World!' Hello World! + mkdiir testing test3.sh: line 4: mkdiir: command not found
可以編寫如下除錯函式,這有助於隨時呼叫它,使用以下示例:
[root@localhost ~]# cat debug.sh #!/bin/bash _DEBUG="on" function DEBUG() { [ "$_DEBUG" == "on" ] && $@ } DEBUG echo 'Testing Debugging' DEBUG set -x a=2 b=3 c=$(( $a + $b )) DEBUG set +x
輸出內容如下:
[root@localhost ~]# sh debug.sh Testing Debugging + a=2 + b=3 + c=5 + DEBUG set +x + '[' on == on ']' + set +x 2 + 3 = 5
錯誤重定向
可以使用標準錯誤輸出將所有系統錯誤重定向到自定義檔案,標準錯誤可以用數字 2 表示。在 Bash shell 執行它,如下所示:
[root@localhost ~]# mkdir users 2> errors.txt [root@localhost ~]# cat errors.txt mkdir: cannot create directory ‘users’: File exists
大多數時候,很難在指令碼中找到確切的行號。要列印帶有錯誤的行號,請使用
PS4
選項,其中的
$LINENO
是預定義好的變數。
[root@localhost ~]# cat test3.sh #!/bin/bash PS4='$LINENO: ' set -x echo "Hello World!" mkdiir testing
可以在閱讀錯誤時輕鬆檢視行號:
[root@localhost ~]# sh test3.sh 5: echo 'Hello World!' Hello World! 6: mkdiir testing test3.sh: line 6: mkdiir: command not found
總結
本文講述了在 Bash 指令碼中處理錯誤的一些技巧,如何獲取錯誤程式碼、在執行指令碼時獲得詳細輸出、處理除錯功能和錯誤重定向。使用這些技巧,系統管理員可以使他們的日常工作變得輕鬆。
本文原創地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2784829/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- grpc中的錯誤處理RPC
- bashdb除錯bash指令碼除錯指令碼
- Restful API 中的錯誤處理RESTAPI
- 【譯】RxJava 中的錯誤處理RxJava
- 談談RxSwift中的錯誤處理Swift
- 應用中的錯誤處理概述
- 錯誤碼全域性處理(二)
- 錯誤碼全域性處理(一)
- 錯誤處理
- go的錯誤處理Go
- axios 的錯誤處理iOS
- Laravel Excpetions(錯誤處理) 原始碼分析Laravel原始碼
- 如何在 Go 中優雅的處理和返回錯誤(1)——函式內部的錯誤處理Go函式
- Python錯誤處理Python
- PHP 錯誤處理PHP
- php錯誤處理PHP
- Go 錯誤處理Go
- 錯誤處理:如何通過 error、deferred、panic 等處理錯誤?Error
- Rust中錯誤處理的最簡單指南Rust
- Bash指令碼指令碼
- Qt處理中文編碼出現錯誤QT
- 關於 Bash 指令碼中 Shebang 的趣事指令碼
- openGauss 處理錯誤表
- 【翻譯】在Spring WebFlux中處理錯誤SpringWebUX
- 請教 Element 的錯誤處理
- [20231102]除錯bash shell指令碼遇到的問題.txt除錯指令碼
- 執行指令碼寫入中間表錯誤返回錯誤資訊指令碼
- 遠端連線錯誤程式碼及處理
- Python錯誤處理和異常處理(二)Python
- 前端的水平線,錯誤處理和除錯前端除錯
- Bash-Insulter:一個在輸入錯誤命令時嘲諷使用者的指令碼指令碼
- 執行shell指令碼報錯:-bash: ./test1.sh: /bin/bash^M: ...指令碼
- Python 指令碼中呼叫 Java 程式時 Classpath 錯誤Python指令碼Java
- Oracle異常錯誤處理Oracle
- 淺談前端錯誤處理前端
- ORACLE 異常錯誤處理Oracle
- PHP 核心特性 - 錯誤處理PHP
- 15-錯誤處理(Error)Error