本文講述了在 Bash 腳本中處理錯誤的一些技巧,如何獲取錯誤代碼、在執行腳本時獲得詳細輸出、處理調試功能和錯誤重定向。使用這些技巧,系統管理員可以使他們的日常工作變得輕松。 |
退出狀态
在 Bash 腳本中,$?将打印退出狀态。如果返回零,則表示沒有錯誤。如果不為零,結論就是任務可能存在一些問題。
如下是一個簡單例子:
[root@localhost ~]# cat myscript.sh
#!/bin/bash
mkdir learning
echo $?
如果運行上述腳本一次,它将打印 0,因為該目錄不存在,因此腳本将創建它。如果第二次運行該腳本,将獲得一個非零值,如下所示:
[root@localhost ~]# sh myscript.sh
0
[root@localhost ~]# sh myscript.sh
mkdir: cannot create directory ‘learning’: File exists
1
最佳實踐
建議通過将 set -x 命令添加到 shell 腳本來啟用調試模式,如下所示:
[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 腳本中處理錯誤的一些技巧,如何獲取錯誤代碼、在執行腳本時獲得詳細輸出、處理調試功能和錯誤重定向。使用這些技巧,系統管理員可以使他們的日常工作變得輕松。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!