新聞中心
本篇文章將為大家分享一下在 Bash 腳本中處理錯誤的一些常用的方法,如何獲取錯誤代碼、在執(zhí)行腳本時獲得詳細輸出、處理調(diào)試功能和錯誤重定向等,有需要的小伙伴可以參考一下。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比芮城網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式芮城網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋芮城地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。
img
退出狀態(tài)
在 Bash 腳本中,$?將打印退出狀態(tài)。如果返回零,則表示沒有錯誤。如果不為零,結(jié)論就是任務(wù)可能存在一些問題。
如下是一個簡單例子:
[root@localhost ~]# cat myscript.sh
#!/bin/bash
mkdir learning
echo $?
如果運行上述腳本一次,它將打印 0,因為該目錄不存在,因此腳本將創(chuàng)建它。如果第二次運行該腳本,將獲得一個非零值,如下所示:
[root@localhost ~]# sh myscript.sh
0
[root@localhost ~]# sh myscript.sh
mkdir: cannot create directory ‘learning’: File exists
1
Bash 腳本中的錯誤處理Bash 腳本中的錯誤處理
最佳實踐
建議通過將 set -x 命令添加到 shell 腳本來啟用調(diào)試模式,如下所示:
[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
可以編寫如下調(diào)試函數(shù),這有助于隨時調(diào)用它,使用以下示例:
[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
輸出內(nèi)容如下:
[root@localhost ~]# sh debug.sh
Testing Debugging
+ a=2
+ b=3
+ c=5
+ DEBUG set +x
+ '[' on == on ']'
+ set +x
2 + 3 = 5
Bash 腳本中的錯誤處理Bash 腳本中的錯誤處理
錯誤重定向
可以使用標準錯誤輸出將所有系統(tǒng)錯誤重定向到自定義文件,標準錯誤可以用數(shù)字 2 表示。在 Bash shell 執(zhí)行它,如下所示:
[root@localhost ~]# mkdir users 2> errors.txt
[root@localhost ~]# cat errors.txt
mkdir: cannot create directory ‘users’: File exists
大多數(shù)時候,很難在腳本中找到確切的行號。要打印帶有錯誤的行號,請使用PS4選項,其中的$LINENO是預(yù)定義好的變量。
[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 腳本中的錯誤處理Bash 腳本中的錯誤處理
文章名稱:Bash腳本中處理錯誤的一些常用的方法
文章URL:http://www.dlmjj.cn/article/djhposp.html


咨詢
建站咨詢
