当前位置: 首页 > Linux

Bash脚本中的错误处理

时间:2023-04-06 04:14:57 Linux

本文介绍了Bash脚本中处理错误的一些技巧,如何获取错误代码,在执行脚本时获取详细输出,处理调试功能和错误重定向。使用这些技巧,系统管理员可以使他们的日常工作更加轻松。退出状态在Bash脚本中,$?将打印退出状态。如果返回零,则没有错误。如果不为零,则结论是任务可能存在一些问题。这是一个简单的例子:[root@localhost~]#catmyscript.sh!/bin/bashmkdirlearningecho$?如果你运行一次上面的脚本,它会打印0因为目录不存在,所以脚本会创建它。如果你第二次运行该脚本,你将得到一个非零值,如下所示:[root@localhost~]#shmyscript.sh0[root@localhost~]#shmyscript.shmkdir:cannotcreatedirectory'learning':Fileexists1最佳实践建议通过将set-x命令添加到您的shell脚本来启用调试模式,如下所示:[root@localhost~]#cattest3.sh!/bin/bashset-xecho"HelloWorld!"mkdiir测试然后运行脚本查看:[root@localhost~]#shtest3.shecho'HelloWorld!'HelloWorld!mkdiirtestingtest3.sh:line4:mkdiir:commandnotfound可以编写如下调试函数,这有助于随时调用它,使用以下示例:[root@localhost~]#catdebug.sh!/bin/bash_DEBUG="on"functionDEBUG(){["$_DEBUG"=="on"]&&$@}DEBUGecho'TestingDebugging'DEBUGset-xa=2b=3c=$(($a+$b))DEBUGset+x输出如下:[root@localhost~]#shdebug.sh测试Debugginga=2b=3c=5DEBUGset+x'['on==on']'set+x3=5错误重定向可以使用标准错误输出将所有系统错误重定向到一个自定义文件,标准错误可以表示按数字2.在Bashshell中执行如下:[root@localhost~]#mkdirusers2>errors.txt[root@localhost~]#caterrors.txtmkdir:cannotcreatedirectory'users':Fileexists大多数时候,很难在脚本中找到确切的行号。要打印有错误的行号,请使用PS4选项,其中$LINENO是预定义变量。[root@localhost~]#cattest3.sh!/bin/bashPS4='$LINENO:'set-xecho"HelloWorld!"mkdiirtesting可以在读取错误时轻松查看行号:[root@localhost~]#shtest3.sh5:echo'HelloWorld!'HelloWorld!6:mkdiirtestingtest3.sh:line6:mkdiir:commandnotfound编写脚本时获取详细输出、处理调试功能和错误重定向。使用这些技巧,系统管理员可以使他们的日常工作更加轻松。